加入两个不相关模型的适当关联是什么

时间:2013-10-24 02:56:49

标签: ruby-on-rails

我有两个模型,FlyerItemProduct。如果您想到电子商店的传单,它可能会出售电视。对于这种特殊情况,我认为传单项目会宣传一种产品。

我已经为这个传单项目定义了模型

class FlyerItem < ActiveRecord::Base
  has_one :product
end

迁移看起来像这样

class CreateFlyerItems < ActiveRecord::Migration
  def change
    create_table :flyer_items, :primary_key => :flyer_item_id do |t|
      t.references :product
    end
  end
end

然后在我的视图中,我尝试访问像这样的项目的特定实例

<% FlyerItem.find do |item| %>
  <p><%= item.product %></p>
<% end %>

但是rails会引发异常

PG::UndefinedColumn: ERROR:  column products.flyer_item_id does not exist
LINE 1: SELECT  "products".* FROM "products"  WHERE "products"."flye...
                                                    ^
: SELECT  "products".* FROM "products"  WHERE "products"."flyer_item_id" = $1  ORDER BY "products"."product_id" ASC LIMIT 

这是预期的,因为产品实际上与传单项目无关,因此产品表不会也不应该包含该列。

我真正想说的是

SELECT * FROM flyer_items WHERE flyer_items.product_id = products.product_id

我会在这里使用什么样的关联?
协会甚至是正确的方法吗?

传单必须有一个产品,但产品不一定需要分配给任何传单。

1 个答案:

答案 0 :(得分:1)

而不是has_one,而不是belongs_tobelongs_to关联方法位于具有外键列的类上。在关联的另一侧,您可以根据需要使用has_manyhas_one

class FlyerItem < ActiveRecord::Base
  belongs_to :product
end

class Product < ActiveRecord::Base
  has_many :flyer_items
end