1

私はモデルを持っています-会議。データベース スキーマでは、会議にはタスクがあります。(タスクにもモデルがあります) 会議を保存すると、会議モデルに自動的に呼び出されるメソッドがあります。次のように書かれています。

def task_attributes=(task_attributes)

どのように呼ばれていますか?私がチェックしました。メソッドは、コード内の他の場所には記述されていません。

4

2 に答える 2

0

ミーティングhas_one :taskがあり、あなたが持っている場合accepts_nested_attributes_for :task、それは、への呼び出しがfields_for :taskフォーマット<association_name>_attributesに従うパラメータを生成することを意味します。これが、コード内のどこにも見つからない理由である可能性があります。

于 2013-02-07T12:38:18.873 に答える
0

あなたはhas_many関連付けを使用しているのでActiveRecord、あなたのケースでは子モデルを保存しています。これは:autosave、新しいタスクを生成する場合に true に設定したかどうかに関係なく発生します。Ruby はすべてのコードをバックグラウンドで動的に生成するため、コードが見つからないのです。

一対多の例

:autosave が宣言されていない場合、親が保存されるときに新しい子が保存されます。

class Meeting
  has_many :comments # :autosave option is not declared
end

meeting = Meeting.new(title: 'staff')
meeting.tasks.build(name: 'boring stuff')
meeting.save # => saves both meeting and task

meeting = Meeting.create(title: 'staff')
meeting.tasks.build(name: 'boring stuff')
meeting.save # => saves both meeting and task

meeting = Meeting.create(title: 'staff')
meeting.tasks.create(name: 'boring stuff')
meeting.save # => saves both meeting and task

:autosave が true の場合、新しいレコードであるかどうかに関係なく、すべての子が保存されます。

class Meeting
  has_many :tasks , autosave: true
end

meeting = Meeting.create(title: 'staff')
meeting.tasks.create(name: 'boring stuff')
meeting.tasks[0].priority = 1
meeting.save # => saves both meeting and task, with 1 as priority
于 2013-02-07T15:52:30.320 に答える