rails:create Parent,如果不存在,则创建子记录

以下任何最佳做法?:

我有制造商型号has_many库存

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

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

你可以尝试这样:

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 

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