Для начала у вас должно быть только две таблицы: Заказы и Продукты.Вот замечательное руководство, которое мне дали в одном из моих вопросов - guides.rubyonrails.org/association_basics.html
Прочитайте это, чтобы ознакомиться с ассоциациями в рельсах, но в значительной степени то, что вы пытаетесьДостигните следующее -
В вашей модели заказа есть отношение
has_many :products
И в вашей модели продуктов есть отношение
belongs_to :order
Таким образом, вы можете связать своюпродукты по вашим заказам.Затем вы можете совершать звонки, такие как
order.products
, которые дадут вам все продукты для определенного заказа.
В ваших миграциях вам нужно будет дать вашим продуктам order_id, чтобы установить связь междузаказы и продукты.
Что касается сохранения продуктов в заказе, вы будете делать это в контроллере продуктов, либо связывая order_id с какой-либо формой в вашем представлении и отправляя идентификатор заказа через хэш params,и просто напишите
product = Product.create(params[:product])
, или вы можете сделать это в своем контроллере и сказать, что
product.order_id = @order.id
@ заказ можно найти по идентификатору заказа из вашего URL в контроллере продуктов, так что выпросто сделайте метод, говорящий
def find_order
@order = Order.find(params[:order_id])
end
и в верхней части контроллера, перед любыми действиями, которые вы можете сказать
before_filter :find_order, :only => :youractiontosaveproducts
, и что вы будете делать, это найти порядок сохранения продуктадо того, как это действие будет вызвано.
Писать весь код в ответе - это немного излишне, чтение этого руководства и некоторая практика помогут вамight track:)