2015-08-01 3 views
0

Я изучаю Rails, строя систему заказов, и я застреваю, пытаясь создать форму для ордеров. Мои модели выглядят следующим образом:Присоединиться к таблице

class Restaurant < ActiveRecord::Base 
    has_many :orders 
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 

Я использовал для обработки ввода для рецептов с использованием флажков, которые только позволили мне добавить один из каждого рецепта:

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

     <strong>Recipes: </strong> 
     <br> 
     <%= f.collection_check_boxes :recipe_ids, @recipes, :id, :name do |cb| %> 
      <% cb.label(class: "checkbox-inline input_checkbox") {cb.check_box(class: "checkbox") + cb.text} %> 
     <% end %> 
     <%= f.collection_select(:recipe_ids, @recipes, :id, :name) %> 
     <%= f.submit(@order.new_record? ? "Create Order" : "Edit Order", class: "btn btn-success") %> 
<% end %> 

Но теперь мне нужно также обрабатывать количества , Поэтому я добавил столбец «количество» в таблицу order_recipes. И я не могу понять, как создать надлежащую форму, чтобы иметь возможность отправить объект Order, с массивом order_recipe объектов, содержащим [recipe_id, order_id, количество] для каждой строки. Я также открыт для использования formtastic, если это упрощает работу, хотя я пока не очень хорош.

ответ

2

ETA: Поскольку quantity поле на orders_recipes столе, вы хотите создать @orders_recipes объект со всеми правильными recipe_id с вместо:

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

Затем вы можете использовать fields_for метод в FormHelper в :

<%= f.fields_for :order_recipes, @order_recipes do |orf| %> 
    <%= orf.hidden_field :recipe_id %> 
    Quantity: <%= orf.number_field :quantity %> 
<%- end -%> 

при желании, вам нужно "вручную" удалить order_recipes с nil или 0 значения для quantity.

Для этого на работу, вам нужно accepts_nested_attributes_for в вашей модели, например, так:

class Order < ActiveRecord::Base 
    … 
    accepts_nested_attributes_for :order_recipes 
end 
+0

Я обновил мой вопрос, чтобы отразить мою полную форму. Кстати, помните, что мой столбец числа находится в таблице join order_recipes, поэтому принятие вложенных атрибутов для рецептов и вызов: количество даст неопределенную ошибку метода. –

+0

@ PatricioJerí Я сделал редактирование, основанное на этом, но я все еще смущен вашей структурой данных. У вас есть таблица 'order_recipes' * и *' recipe_orders'? Это обе отдельные модели? – eirikir

+0

Также спасибо. Думаю, я смогу сделать это сейчас. :) –

 Смежные вопросы

  • Нет связанных вопросов^_^