2

私はvalidate :my_validateUser モデルに持っていますがmy_validate、「has_may :through」属性が変更された場合は呼び出されません。それは正しい行動ですか?

私のコード:

class User < ActiveRecord::Base

  has_many :roles, :through => :user_roles

  validate :my_validate
  def my_validate
    raise 123
  end

これは例外をスローします:

User.find(1).name = 'new_name'

これは機能します:

User.find(1).roles = []

ユーザーテーブルが更新されていないことは理解しているので、レールは検証は必要ないと考えていますが、それは本当に奇妙に見えます。

4

1 に答える 1

0
User.find(1).name = 'new_name' 

名前に何らかの値を割り当て、値をユーザーテーブルに保存しようとするため、例外がスローされます。検証メソッド「my_validate」でエラーが発生しています。値を保存する場合はエラーがスローされます。

User.find(1).roles = []

しかし、2 番目の方法では、users テーブルではなく、roles テーブルに何らかの値を割り当てます。その賢明なことは、エラーをスローしていないことです。

于 2012-07-16T06:55:18.183 に答える