我有这种自定义验证方法,可确保您无法对自己的内容进行投票,并导致相当多的RSpec测试失败并显示undefined method 'user_id' for nil:NilClass
有没有办法重写自定义验证,或使用本机rails验证?
failing tests
12) Vote votable type
Failure/Error: @vote = FactoryGirl.create(:vote)
NoMethodError:
undefined method `user_id' for nil:NilClass
# ./app/models/vote.rb:18:in `ensure_not_author'
# ./spec/models/vote_spec.rb:5:in `block (2 levels) in <top (required)>'
validate :ensure_not_author
vote.rb
attr_accessible :value, :votable_id, :votable_type
belongs_to :votable, polymorphic: true
belongs_to :user
def ensure_not_author
votable = self.votable_type.downcase
errors.add(:user_id, "You can't vote on your own content.") if self.votable.user_id == self.user_id
end
如果有人需要更多代码,只需大喊
答案 0 :(得分:2)
看起来self.votable
是零。似乎这个测试应该从投票的角度来看待投票。如果是这种情况,那么在工厂为您的可选项创建投票并将测试移至您的可投票实体套件,因为您确实测试了投票人无法对自己的内容进行投票。