1

Railsのattr_accessorで一貫性の問題が常に発生していました。どんな詳細が欠けているのかわからなかったので、ここに質問をしようと思いました。

私は次のものを持っています:

  ...Controller
  new
     @something = Something.new
     @something.it_should = true
  end

  ....Model
  attr_accessor :it_should

  def should_validate?
     it_should
  end

  validates_presence_of :name, :if => :should_validate?

そこで、コントローラーのインスタンス変数をtrueに設定しました。その変数をattr_accessorを介してモデルで使用できるようにします。変数をメソッドに入れてから、そのメソッドを検証に使用します。うまくいくようです。しかし、それは何もしません。it_shouldがtrueに設定されることはありません。ページは正常に読み込まれますが、フィールドは検証されません。

私もこれを試しました...しかし、それは検証を実行させませんでした。

  def should_validate?
     true
  end

att_accessorを使用するための秘訣は何ですか?

4

1 に答える 1

2

@it_should問題は、で設定したインスタンス変数attr_accessorがリクエスト間で永続化されないことです。そのため、アクションで設定してtruenew、フォームが送信され、他のアクション(おそらくcreateまたはupdate)がトリガーされるとすぐにリセットされます。

この方法でフィールドを検証する場合は、フォームの送信によってトリガーされるアクションでフィールドを設定する必要があります。例create

def create
  @something = Something.new(params[:something])
  @something.it_should = true
  @something.save
  ...
end

これにより、期待どおりに検証がトリガーnameされます。

于 2012-11-10T02:04:30.080 に答える