我有两个模特,FlyerItem和Product。如果你想到一家电子商店的传单,它可能会播放一台特价电视。在这个特殊的情况下,我想一个传单项目广告的一个产品。
我已经为传单项目定义了如下模型
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 这是意料之中的,因为产品实际上与传单项目无关,所以product没有,也不应该有该列。
我真正想说的是
从flyer_items选择*,其中flyer_items.product_id = products.product_id
我在这里会用什么样的联想?
联合甚至是正确的方法吗?
传单必须有一个产品,但产品不一定需要分配给任何传单。
发布于 2013-10-24 03:00:40
而不是has_one,你想要belongs_to。belongs_to关联方法对具有外键列的类进行处理。在关联的另一端,您可以根据需要使用has_many或has_one。
class FlyerItem < ActiveRecord::Base
belongs_to :product
end
class Product < ActiveRecord::Base
has_many :flyer_items
endhttps://stackoverflow.com/questions/19556102
复制相似问题