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 回答