繁体   English   中英

使用一种形式在Rails中创建具有重叠属性的两个模型

[英]Using one form to create two models with overlapping attributes in Rails

这篇文章对于如何用一种形式创建两个模型似乎很有帮助。 但是,如果两个模型共享一个或多个属性,您将如何做?

该帖子似乎已经过时了,我建议您在表单中改用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

尽管这不是一个好习惯,但理想情况下应将此逻辑移至模型中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM