Хорошо, так вот сделка. У меня две таблицы и таблица соединений, так как это отношения «многие ко многим». У меня есть заказ, и у заказа может быть много продуктов. Очевидно, что это происходит иначе, поскольку продукты могут быть на разных порядках. У меня есть следующие классы:Rails 3 has_many: через вопрос об именовании
class Order < ActiveRecord::Base
has_many :orders_products
has_many :products, :through => :orders_products
end
class OrderProduct < ActiveRecord::Base
belongs_to :order
belongs_to :product
end
class Product < ActiveRecord::Base
has_many :orders_products
has_many :orders, :through => :orders_products
end
Я получаю страницу, чтобы увидеть и я в состоянии войти вещи, и когда я иду, чтобы взаимодействовать с продуктами на сохраненном заказе через @order.products
я получаю следующее сообщение об ошибке:
SQLite3::SQLException: no such table: order_products: SELECT "products".* FROM "products" INNER JOIN "order_products" ON "products".id = "order_products".product_id WHERE (("order_products".order_id = 1))
Моя присоединиться к таблице называется orders_products
, но как вы можете видеть, что он пытается присоединиться через order_products
. Мои ограниченные знания о соглашениях об именах Rails говорят мне, что orders_products
- это правильный способ назвать его, а затем назвать мою модель как OrderProduct
. Я действительно стуча головой о стену на этом.
EDIT: Я вижу, что даже если он сохранил мой заказ, и я выбрал несколько флажков, он не сохранил никаких значений в таблице orders_products
, предположительно по той же причине, что и ошибка.
См. [Руководство по этой теме] (http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association) для примера правильной ассоциации 'has_many: through'. –
Ах, видите, я думал, что habtm устарел. – MattC
Однако, похоже, я исправил свою проблему, поэтому вы получаете звезду. Кроме того, 5 баллов за принятый ответ: D – MattC