Я изучаю код приложения для ресторана. Я застрял сейчас, я не понимаю отношения между заказами и предметами. Похоже, что есть совместный стол, но я не понимаю логику этого. Вот код схемы `
ActiveRecord::Schema.define(version: 20160327212111) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
create_table "items", force: :cascade do |t|
t.string "name"
t.string "cuisine_type"
t.integer "price"
end
create_table "items_orders", id: false, force: :cascade do |t|
t.integer "order_id", null: false
t.integer "item_id", null: false
end
add_index "items_orders", ["item_id", "order_id"], name: "index_items_orders_on_item_id_and_order_id", using: :btree
add_index "items_orders", ["order_id", "item_id"], name: "index_items_orders_on_order_id_and_item_id", using: :btree
create_table "orders", force: :cascade do |t|
t.datetime "created_at"
t.datetime "updated_at"
t.integer "party_id"
t.boolean "paid?", default: false
end
end
А вот и метод создания заказа контроллера, который смущает меня еще больше.
def create
food_items = params[:item][:item_id].drop(1).map{ |item| item.to_i}
@items = Item.where("id in (?)", food_items)
@order = Order.new(order_params)
# items_array = params[:item]["item_id"].drop(1)
if @order.save
@items.each { |item| @order.items << item }
redirect_to orders_path
else
redirect_to new_order_path
end
end
Спасибо за вашу помощь.
ОБНОВЛЕНИЕ моделей товара и заказа
class Item < ActiveRecord::Base
has_and_belongs_to_many :orders
end
class Order < ActiveRecord::Base
has_and_belongs_to_many :items
has_one :party
end
Контроллер товаров и заказов
class ItemsController < ApplicationController
def index
@item = Item.all
end
def show
@item = Item.find(params[:id])
end
def new
@item = Item.new
end
def create
@item = Item.new(item_params)
if @item.save
redirect_to items_path
else
redirect_to new_item_path
end
end
def edit
@item = Item.find(params[:id])
end
def update
@item = Item.find(params[:id])
@item.update(item_params)
redirect_to items_path
end
def destroy
@item = Item.find(params[:id])
@item.destroy
redirect_to items_path
end
private
def item_params
params.require(:item).permit(:name, :cuisine_type, :price)
end
end
class OrdersController < ApplicationController
def index
@orders = Order.order(:party_id)
@items = Item.all
@parties = Party.all
end
def show
@orders = Order.find(params[:id])
end
def new
@order = Order.new
@orders = Order.all
@items = Item.all
@parties = Party.all
end
def create
puts "Item ids #{params[:item][:item_id]}"
food_items = params[:item][:item_id].drop(1).map{ |item| item.to_i}
@items = Item.where("id in (?)", food_items)
@order = Order.new(order_params)
# items_array = params[:item]["item_id"].drop(1)
if @order.save
@items.each { |item|
@order.items << item
}
redirect_to orders_path
else
redirect_to new_order_path
end
end
def destroy
@order = Order.find(params[:id])
@order.destroy
redirect_to orders_path
end
private
def order_params
params.require(:order).permit(:party_id, :item_id)
end
end