rails:创建父记录(如果不存在),同时创建子记录

时间:2010-08-27 23:46:10

标签: ruby-on-rails nested-forms nested-attributes

以下任何最佳做法?:

我有制造商型号has_many库存

在我的新库存表单中,我想要一个映射到Manufacturer.name的字段,以便在一个表单中 从应用程序提交新的库存:

  • 从表单中搜索具有“名称”的制造商
    • 如果存在,则将id分配给@ inventory.manufacturer_id并保存@inventory
    • 如果它不存在,则从表单中创建带有'name'的制造商,将id分配给@ inventory.manufacturer_id并保存
    • 在新的库存表单上进行验证
      • 这样,如果清单表单在“名称”以外的字段上验证失败
        • 'name'字段将以用户输入的内容重新填充(但除非表单通过验证,否则不会创建新的制造商)

1 个答案:

答案 0 :(得分:4)

您可以尝试这样:

class Inventory < ActiveRecord::Base

  ...

  belongs_to :manufacturer

  ...

  def manufacturer_name
    manufacturer && manufacturer.name
  end

  def manufacturer_name=(value)
    self.manufacturer = Manufacturer.find_by_name(value)
    self.manufacturer ||= Manufacturer.new(:name => value)
  end

  ...

end

在这种情况下,您应该在库存表单上输出manufacturer_name文本字段。