在第11章开头遇到问题 . 在第10章结束时测试绿色后,我将代码清单11.2添加到tests / models / micropost_test.rb
require 'test_helper'
MicropostTest类<ActiveSupport :: TestCase
def setup
@users = users(:michael)
# This code not idiomatically correct.
@micropost = Micropost.new(content: "Lorem ipsum", user_id: @user.id)
end
test "should be valid" do
assert @micropost.valid?
end
test "user id should be present" do
@micropost.user_id = nil
assert_not @micropost.valid?
end
结束
并且可以预见得到一个RED . 将清单11.4中的验证添加到app / model / s / micropost.rb`
class Micropost <ActiveRecord :: Base belongs_to:user validates:user_id,presence:true end
问题是我在测试时继续遇到以下错误:
错误["test_should_be_valid",MicropostTest,0.255918787] test_should_be_valid#MicropostTest(0.26s)NoMethodError:NoMethodError:undefined method id' for nil:NilClass test/models/micropost_test.rb:8:in
setup ' test/models/micropost_test.rb:8:in `setup'
错误["test_user_id_should_be_present",MicropostTest,0.260151448] test_user_id_should_be_present#MicropostTest(0.26s)NoMethodError:NoMethodError:undefined method id' for nil:NilClass test/models/micropost_test.rb:8:in
setup ' test/models/micropost_test.rb:8:in `setup'
任何人都可以引导我朝着正确的方向前进吗?谢谢!
2 回答
我认为错误在这一行:
它应该是@user without s
因为你在这一行使用了@user变量
答案结果是我安装了一个旧的“protected_attributes”gem . 你不能使用它和强大的参数 . 卸载后,我可以从模型中删除旧的attributes_accessible行,并传递所有测试 .