0

我有这种自定义验证方法,它确保你不能对自己的内容投票,它会导致很多 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

投票.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

如果有人需要更多代码,请大喊

4

1 回答 1

2

看起来self.votable是零。看起来这个测试应该从投票者的角度来看待投票。如果是这种情况,则在工厂中为您的可投票对象创建投票并将测试移至可投票实体的套件,因为您实际上是在测试可投票对象不应对其自己的内容进行投票。

于 2013-06-19T19:15:40.070 回答