我有一个模特 - 会议。在数据库架构中 - 会议具有任务。 (任务也有模型) 保存会议时,会在会议模型中自动调用一种方法。 它是这样写的:
def task_attributes=(task_attributes)
它是如何被调用的?我检查了。该方法不会写入代码中的任何其他位置。
答案 0 :(得分:0)
如果会议has_one :task
并且您有accepts_nested_attributes_for :task
,则表示对fields_for :task
的调用将生成遵循<association_name>_attributes
格式的参数,这可能是您可以使用的原因在代码中的任何地方都找不到它。
答案 1 :(得分:0)
由于您使用has_many
关联,ActiveRecord
正在保存子模型,在您的案例任务中。如果要生成新任务,是否将:autosave
设置为true会发生这种情况。 Ruby在幕后动态生成所有代码,这就是你找不到它的原因。
当:未声明自动保存时,保存其父级时将保存新的子项:
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
当:自动保存为真时,所有孩子都会被保存,无论他们是否是新记录:
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