访问Model的关联Model上的数据以执行验证

时间:2013-04-16 01:21:39

标签: ruby-on-rails

class User < ActiveRecord::Base
  belongs_to :school

  validates :email, :email => { :message => "Must be a valid email." }, :format => { :with => /\A[\w+\-.]+@#{Regexp.quote(school.email_domain)}\z/i }

end  

我希望能够验证创建用户的电子邮件是否与学校的电子邮件域相匹配。我通过以下方式创建用户:

@school.users.create(params[:user])

抛出错误:

undefined local variable or method `school' for #<Class:0x007f8aaabb0df0>

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您收到该错误是因为您尝试在的上下文中调用#school方法,而不是在您的实例中调用class,#school是一个实例方法。

要在构建验证格式Regexp时调用实例方法,您可以提供lambda作为:with选项,如下所示:

validates :email,
  :message => "Must be a valid email",
  :format => { :with => lambda {|user| /\A[\w+\-.]+@#{Regexp.quote(user.school.email_domain)}\z/i } }

此lambda将在您的模型实例上调用,允许您调用User实例上的方法,例如#school。有关详细信息,请参阅validates_format_of的文档。