私はモデルを持っています-会議。データベース スキーマでは、会議にはタスクがあります。(タスクにもモデルがあります) 会議を保存すると、会議モデルに自動的に呼び出されるメソッドがあります。次のように書かれています。
def task_attributes=(task_attributes)
どのように呼ばれていますか?私がチェックしました。メソッドは、コード内の他の場所には記述されていません。
私はモデルを持っています-会議。データベース スキーマでは、会議にはタスクがあります。(タスクにもモデルがあります) 会議を保存すると、会議モデルに自動的に呼び出されるメソッドがあります。次のように書かれています。
def task_attributes=(task_attributes)
どのように呼ばれていますか?私がチェックしました。メソッドは、コード内の他の場所には記述されていません。
ミーティングhas_one :task
があり、あなたが持っている場合accepts_nested_attributes_for :task
、それは、への呼び出しがfields_for :task
フォーマット<association_name>_attributes
に従うパラメータを生成することを意味します。これが、コード内のどこにも見つからない理由である可能性があります。
あなたは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