簡體   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