2
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>

谢谢您的帮助!

4

1 回答 1

2

您收到该错误是因为您尝试在#school的上下文中而不是在类的实例中调用该方法,并且是一个实例方法。#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

于 2013-04-16T01:31:01.527 回答