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 を構築するときにインスタンス メソッドを呼び出すには、次のようにラムダ:withオプションとして指定できます。

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

Userこのラムダはモデル インスタンスで呼び出され、インスタンスで などのメソッドを呼び出すことができます#school。詳細については、ドキュメントを参照しvalidates_format_ofてください。

于 2013-04-16T01:31:01.527 に答える