0

次のようなほとんど静的なデバイスのテーブルがあります。

class CreatePlatforms < ActiveRecord::Migration
  def change
    create_table :platforms do |t|
      t.column :model, :string, :null => false
      t.column :name, :string, :null => false

      t.timestamps
    end

    add_index :platforms, :model, :unique => true

    Platform.create  :model => "iPhone1,1", :name => "Original iPhone"
    Platform.create  :model => "iPhone1,2", :name => "iPhone 3G"
    [...]
  end
end

そして、プラットフォームを参照するテーブル、デバイス。次に、モデルをサーバーに送信し、作成したデバイスをデータベース内のそのモデルの対応する ID にリンクさせたいと思いますaccepts_nested_attributes_for :platform。ただし、属性に id がない限り、レコードが作成されます。

accepts_nested_attributes_forまたは同様の方法で、別の属性を使用して既存のレコードを検索する方法はありますか?

次のようにコントローラーで手動で交換することもできますが、それは厄介で最後の手段です。

params[:device][:platform] = Platform.find_by_model params[:device][:platform_attributes][:model]
4

1 に答える 1

1

私は解決策を見つけました:

def autosave_associated_records_for_platform
  if new_platform = Platform.find_by_model(platform.model) then
    self.platform = new_platform
  else
    self.platform.name = "Unknown"
    self.platform.save!
  end
end
于 2012-04-19T21:06:21.700 に答える