Rails条件验证

zsl*_*ius 5 validation ruby-on-rails

所以我这里有两个型号:

class Screen < ActiveRecord::Base
  belongs_to :user
  validates :screen_size, :numericality =>{:less_than_or_equal_to =>100,:greater_than_or_equal_to => 0},:if => "user.access==1"

class User < ActiveRecord::Base
  has_many :screens
  attr_accessible :access
Run Code Online (Sandbox Code Playgroud)

但是这个代码不起作用,因为无论user.access是什么值,它仍然会执行验证.我在这做错了什么?

谢谢

apn*_*ing 21

更改:

:if => "user.access==1"
Run Code Online (Sandbox Code Playgroud)

有:

:if => lambda { |screen| screen.user.try(:access) ==1 }
Run Code Online (Sandbox Code Playgroud)

因为:

  • 你需要传递一个函数来动态评估条件

  • 如果您的屏幕没有任何用户,仅仅screen.user.access会抛出异常

  • 我也会使用proc,但是通过[docs](http://guides.rubyonrails.org/active_record_validations_callbacks.html#using-a-string-with-if-and-unless),它应该接受一个字符串评估保存记录的范围.我想知道`self.user.try(:access)== 1`是否有效? (5认同)