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>
感谢您的帮助!
答案 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
的文档。