Rails имеет много сквозных - PullRequest
       19

Rails имеет много сквозных

2 голосов
/ 28 февраля 2012

Так что вся эта вещь многих ко многим меня действительно смутила. Я понимаю, как настроить его, но я не могу найти нигде, который действительно объясняет лучший способ использовать его в вашем контроллере.

Что у меня есть:

Продукты, Заказы, Заказы_Продукты

Таблица «Продукты и заказы» содержит стандартные данные (идентификатор, имя, метки времени и т. Д.)

Таблица Orders_Products содержит два столбца идентификатора (order_id, product_id) и столбец количества.

Что мне нужно сделать:

Теперь, когда я сохраняю свою «корзину», как вы сохраняете новый заказ и каждый товар с его количеством?

Это мое первое приложение в рельсах, поэтому чем больше объяснений, тем лучше.

Заранее спасибо за помощь!

1 Ответ

2 голосов
/ 29 мая 2012

Для начала у вас должно быть только две таблицы: Заказы и Продукты.Вот замечательное руководство, которое мне дали в одном из моих вопросов - 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:)

...