【问题标题】:Polymorphic associations : which migration file must I change?多态关联:我必须更改哪个迁移文件?
【发布时间】:2013-05-23 09:11:57
【问题描述】:

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

我创建了 Location 模型: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

然后我在我的位置迁移文件中添加外键和索引:

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.locationproduct.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 添加到用户和产品迁移文件中?

【问题讨论】:

    标签: polymorphic-associations ruby-on-rails-4


    【解决方案1】:

    我认为你在这里做的是设置has_many belongs_to 环境。

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

    【讨论】:

    • 谢谢,它成功了。但我仍然对我遇到的问题感到好奇。
    猜你喜欢
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    相关资源
    最近更新 更多