我的Rails应用中有一个数据库,其中包含positions
个project
的列表。用户可以为他们正在处理的当前项目添加/删除位置。当用户创建新项目时,我希望将这些位置作为默认值。这可能吗?
答案 0 :(得分:1)
是。我建议在项目模型中使用after_save回调
所以,在你的模型中:
def before_save
@was_a_new_record = new_record?
return true
end
after_save :create_positions
def create_positions
Position.create name: 'Manager', project_id: self.id if @was_a_new_record
# repeat as required
end
答案 1 :(得分:1)
#app/models/project.rb
class Project < ActiveRecord::Base
has_many :positions
before_create :set_positions
accepts_nested_attributes_for :positions #-> required for Rails 4.2+
private
def set_positions
3.times do
self.positions.build
end
end
end
用户创建新项目时
上面将在您创建position
之前构建关联的project
对象。您可以为每个新对象添加特定属性:
self.projects.build name: "test"
它的美妙之处在于所有记录将同时保存,使其特别有效。