我有一个模型 - 会议。在数据库模式中 - 会议有任务。(任务也有模型)当我保存会议时,会议模型中有一个自动调用的方法。它是这样写的:
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 为真时,所有子项都会被保存,无论它们是否是新记录:
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