Rails在表单提交

时间:2016-01-10 00:18:02

标签: ruby-on-rails database ruby-on-rails-4

我的Rails应用中有一个数据库,其中包含positionsproject的列表。用户可以为他们正在处理的当前项目添加/删除位置。当用户创建新项目时,我希望将这些位置作为默认值。这可能吗?

2 个答案:

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

它的美妙之处在于所有记录将同时保存,使其特别有效。