我有两种型号:用户和产品。 我想添加第三个模型,位置。
我已使用:rails generate model Location address:string
根据guide,我修改 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控制台时,我无法获得user.location
或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
添加到用户和产品迁移文件中?
答案 0 :(得分:1)
我认为您在此处所做的是设置has_many
&lt; - &gt; belongs_to
环境。
如果您真的想要has_one
,那么您只需在User
和Product
型号上添加外键即可。如果我没有误会,就不需要使用多态模型。