Rails条件validation
所以我这里有两个型号:
class Screen {: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
但是这段代码不起作用,因为无论user.access是什么值,它仍然会执行validation。 我在这做错了什么?
谢谢
更改:
:if => "user.access==1"
有:
:if => lambda { |screen| screen.user.try(:access) ==1 }
因为:
-
你需要传递一个函数来动态评估条件
-
如果您的屏幕没有任何用户,仅仅是
screen.user.access
会抛出exception
您将一个字符串传递给:if可执行proc / function参数。 当这是一个字符串时,它会尝试查找具有该名称的函数。 你真正想要的是一个使用lambda的匿名函数。
class Screen < ActiveRecord::Base belongs_to :user validates :screen_size, :numericality => {:less_than_or_equal_to =>100, :greater_than_or_equal_to => 0}, :if => lambda {|s| s.user.access == 1 } end class User < ActiveRecord::Base has_many :screens attr_accessible :access end