3

Any best practices for the following?:

I have Manufacturer model that has_many Inventory

In my new Inventory form I want a field that maps to Manufacturer.name so that when one submits the new Inventory form the app:

  • searches for a manufacturer with the 'name' from the form
    • if it exists then assign the id to @inventory.manufacturer_id and save @inventory
    • if it doesn't exist then create the manufacturer with the 'name' from the form, assign the id to @inventory.manufacturer_id and save
    • have validations work on the new Inventory form
      • such that, if the the Inventory form fails validation on a field other than 'name'
        • the 'name' field will be repopulated with whatever the user entered (but a new manufacturer is not created unless the form passes validation)
4

1 回答 1

4

You may try like this:

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

In this case you should output manufacturer_name text field on Inventory form.

于 2010-08-28T07:21:17.340 回答