3

次のベストプラクティスはありますか?:

has_manyInventoryのManufacturerモデルがあります

新しい在庫フォームで、Manufacturer.nameにマップするフィールドが必要です。これにより、新しい在庫フォームをアプリに送信したときに、次のようになります。

  • フォームから「名前」を持つメーカーを検索します
    • 存在する場合は、IDを@ Inventory.manufacturer_idに割り当て、@inventoryを保存します
    • 存在しない場合は、フォームから「name」を使用して製造元を作成し、IDを@inventory.manufacturer_idに割り当てて保存します。
    • 新しい在庫フォームで検証を機能させる
      • そのため、在庫フォームが「名前」以外のフィールドの検証に失敗した場合
        • 「名前」フィールドには、ユーザーが入力した内容が再入力されます(ただし、フォームが検証に合格しない限り、新しいメーカーは作成されません)
4

1 に答える 1

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テキストフィールドを出力する必要があります。

于 2010-08-28T07:21:17.340 に答える