我想创建特定于用户的验证。
用户有一个名为“rule_values”的列,它是某些数量的序列化哈希值。
在另一个模型中,Foo,我有一个验证:
class Foo < ActiveRecord::Base
belongs_to :user
n = self.user.rule_values[:max_awesome_rating] #this line is giving me trouble!
validates_presence_of :awesome_rating, :in => 1..n
end
似乎self指的是Foo(这就是为什么我得到一个未定义的方法错误)而不是Foo的实例。如何从Foo模型中访问User实例?
答案 0 :(得分:1)
如何在这样的Foo
上创建自定义验证?
class Foo < ActiveRecord::Base
validate do |foo|
n = foo.user.rule_values[:max_awesome_rating]
unless (1..n).include? foo.awesome_rating
foo.errors.add :awesome_rating, "must be present and be between 1 and #{n}"
end
end
end
这样您就可以访问实例和用户关联
答案 1 :(得分:1)
Rails支持自定义验证(使用validate
)。这里有一个关于它如何工作的想法(虽然没有检查):
class Foo < ActiveRecord::Base
belongs_to :user
validate :awesome_rating_is_in_range
def awesome_rating_is_in_range
errors.add(:awesome_rating, 'not in range') unless (1..user.rule_values[:max_awesome_rating]).include? awesome_rating
end
end