使用一个表单在Rails中创建两个具有重叠属性的模型

时间:2011-12-11 16:33:49

标签: ruby-on-rails forms activerecord

对于如何使用一个表单创建两个模型,此post似乎很有用。但是如果两个模型共享一个或多个属性,你会怎么做?

1 个答案:

答案 0 :(得分:1)

该帖子似乎已经过时,我建议您在表单中使用accepts_nested_attributes_forfields_for。也就是说,应该在模型的回调中设置重叠属性。假设您希望项目的名称自动设置为第一个任务的名称。

class Project < ActiveRecord::Base
  has_many :tasks
  accepts_nested_attributes_for :tasks
  before_validation :set_name_from_task

  private
  def set_name_from_task
    self.name = tasks.first.name
  end
end

如果您的2个模型完全不相关,您可以直接在控制器中为它们分配某些参数。

def create
  @foo = Foo.new(params[:foo])
  @bar = Bar.new(params[:bar])

  @bar.common_attr = params[:foo][:common_attr]

  # validation/saving logic
end

虽然这不是一个很好的做法,但理想情况下应将此逻辑转移到模型中。