1

我有两个模型:用户和产品。我想添加第三个模型,位置。

我创建了 Location 模型:rails generate model Location address:string

根据指南,我修改了app/models/model.rb

class Location < ActiveRecord::Base
  belongs_to :localizable, polymorphic: true
end

class User < ActiveRecord::Base
  has_one :location, as: :localizable
end

class Product < ActiveRecord::Base
  has_one :location, as: :localizable
end

然后我在我的 Location 迁移文件中添加了 foreign_key 和一个索引:

class CreateLocations < ActiveRecord::Migration
  def change
    create_table :locations do |t|
      t.string :address
      t.integer :localizable_id
      t.string :localizable_type

      t.timestamps
    end
    add_index :locations, [:localizable_id, :localizable_type]
  end
end

但它并没有像我想象的那样工作。当我使用 rails 控制台时,我无法获得 auser.location或 a product.location。它给我发回以下消息:

ActiveRecord::StatementInvalid:
SQLite3::SQLException: no such column: locations.localizable_id: SELECT  "locations".* FROM "locations"  WHERE "locations"."localizable_id" = ? AND "locations"."localizable_type" = ?  ORDER BY "locations"."id" ASC LIMIT 1

我是否必须t.integer :location_id同时添加到用户和产品迁移文件?

4

1 回答 1

1

我认为你在这里做的是设置一个has_many<-->belongs_to环境。

如果你真的想要 aahas_one那么你只需要在你的UserProduct模型上添加一个外键。如果我没记错的话,不需要使用多态模型。

于 2013-05-23T14:33:14.327 回答