У меня две модели, 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 %>
Однако рельсов генерирует исключение
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 не имеет и не должна иметь этот столбец.
То, что я действительно хочу сказать что-то вроде
SELECT * FROM flyer_items WHERE flyer_items.product_id = products.product_id
Какие ассоциации я бы использовать здесь?
Является ли ассоциация даже правильным подходом?
Буклет должен иметь один продукт, но продукт не обязательно должен быть привязан к любым листовки.
Спасибо! Я думаю, что думать об этом в естественном языке на самом деле не работает в этом случае, поскольку я думаю: «Хорошо, что на самом деле не имеет смысла, чтобы продукт имел много элементов флаера» ... но тогда это отношения между таблицами , поэтому я должен помнить об этом так. – MxyL
Мне понадобилось время, чтобы привыкнуть к «языковому» аспекту, но это становится легче. Мне было полезно сначала подумать о противоположных отношениях, в том, что не содержит внешнего ключа. В вашем случае это продукт. Продукт «имеет много листовок» об этом, один для всех праздников и продаж. – ctcherry
Ваша интерпретация будет более точным представлением отношений между элементом флаера и продуктом. В этом контексте «имеет много» имеет смысл. – MxyL