2015-08-02 3 views
1

Я изучаю Rails, строя систему заказов, и я застреваю, пытаясь создать форму для Orders. Где Заказы - это вложенный ресурс для Ресторана. Маршруты:Rails Join Table Nested form_for

resources :restaurants do 
    resources :orders 
    resources :recipes 
end 

Мои модели выглядеть следующим образом:

class Restaurant < ActiveRecord::Base 
    has_many :orders 
    has_many :recipes, dependent: :destroy 
end 

class Order < ActiveRecord::Base 
    belongs_to :restaurant 
    has_many :order_recipes, dependent: :destroy 
    has_many :recipes, through: :order_recipes 
end 

class Recipe < ActiveRecord::Base 
    belongs_to :restaurant 
    has_many :order_recipes 
    has_many :orders, through: :order_recipes 
end 

Мой контроллер:

 @recipes = @restaurant.recipes 
     @order_recipes = @recipes.map{|r| @order.order_recipes.build(recipe: r)} 

И мое мнение:

<%= form_for([@restaurant, @order]) do |order_form| %> 
     <%= order_form.label :Table_Number %> 
     <%= order_form.number_field :table_id %> 

     <%= order_form.fields_for :order_recipes, @order_recipes do |orf| %> 
     <%= order_form.hidden_field :recipe_ids %> 
     <%= order_form.label Recipe.where(id: :recipe_id) %> 
     <%= orf.number_field :quantity %> 

Моя текущая проблема отображающая имена eac h рецепт. Кажется, что recipe_id все время передается как null. Моя конечная цель - создать order_recipes, заполняющий столбец количества, и я подумал, что с recipe_id из order_recipes я мог бы также получить доступ к правильному объекту рецепта из БД, чтобы отобразить имя или любые другие соответствующие данные.

+0

Вы забыли о модели OrderRecipes? – Vasseurth

+0

Нет, его там. Кстати, этот ответ работает для меня, по крайней мере, для формы. Все еще борется с передачей параметров. (Http://stackoverflow.com/questions/25235025/rails-4-accessing-join-table-attributes) –

ответ

0

Предполагалось, что у вас есть ресторан, у него есть рецепты, он принимает заказы, заказы отслеживаются по таблице order_recipes.

# controller 
@recipes = @restaurant.recipes 
@order = @recipes.map{|r| r.order.build} 

# view 
<%= form_for([@restaurant, @order]) do |order_form| %> 
    ... 
    <% @order.each do |index, ord| %> 
    <%= order_form.fields_for :orders, @order do |orf| %> 
     ... 
     <%= order_form.label @recipes[index] %> 
     <%= orf.number_field :quantity %> 

# also in restaurant model 
accepts_nested_attributes_for :orders 
+0

Извините, забыли включить эту строку. Отредактировано выше, чтобы отразить фактический код. –

+0

Не могли бы вы также опубликовать свой файл маршрутов. – Ojash

+0

Отредактированный вопрос. Но его обычный нормальный вложенный ресурс. :) Кроме того, я начал использовать ответ, предоставленный в этом вопросе, но еще не успел: http://stackoverflow.com/questions/25235025/rails-4-accessing-join-table-attributes –

0

попробовать так в контроллере:

@order_recipes = @recipes.map{|r| @order.build_order_recipes(recipe: r)} 
+0

Дает мне нет ошибки метода –

0

В конце концов я получил это ответ разместил в этом вопросе работать: Rails 4 Accessing Join Table Attributes Я только борется с переходом правильные параметры теперь, но форма верно.