了解Rails模型函数

时间:2013-02-07 12:30:56

标签: ruby-on-rails ruby

我有一个模特 - 会议。在数据库架构中 - 会议具有任务。 (任务也有模型) 保存会议时,会在会议模型中自动调用一种方法。 它是这样写的:

def task_attributes=(task_attributes)

它是如何被调用的?我检查了。该方法不会写入代码中的任何其他位置。

2 个答案:

答案 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