代码之家  ›  专栏  ›  技术社区  ›  telecasterrok

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

  •  3
  • telecasterrok  · 技术社区  · 15 年前

    以下方面有什么最佳实践吗?:

    我有很多库存的制造商型号

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

    • 从表单中搜索具有“名称”的制造商
      • 如果存在,则将ID分配给@inventory.manufacturer_id并保存@inventory
      • 如果不存在,则使用表单中的“名称”创建制造商,将ID分配给@inventory.manufacturer\u id并保存
      • 对新的库存表单进行验证
        • 这样,如果库存表单未通过“名称”以外的字段的验证
          • “名称”字段将用用户输入的任何内容重新填充(但除非表单通过验证,否则不会创建新的制造商)
    1 回复  |  直到 15 年前
        1
  •  4
  •   lest    15 年前

    您可以这样尝试:

    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
    

    在这种情况下,您应该在库存表单上输出制造商名称文本字段。