У меня есть has_many и has_many: через связь между моделью Order, User, Product и Order_detail в качестве таблицы соединений.Rails - has_many: через ассоциацию + сохранить данные для ассоциации
Модели:
class Order < ActiveRecord::Base
has_many :order_details
belongs_to :user
has_many :products, through: :order_details
end
class OrderDetail < ActiveRecord::Base
belongs_to :order
belongs_to :product
end
class Product < ActiveRecord::Base
has_many :order_details
has_many :orders, through: :order_details
end
class User < ActiveRecord::Base
has_many :orders
end
Как автоматически присоединиться таблицы order_details сохранить. Теперь данные сохраняются только в таблице заказов. нужно сохранить все продукты до order_tables для текущего заказа и пользователя
class OrdersController < ApplicationController
before_action :authenticate_user!
def index
@order = Order.all
end
def new
# @order = Order.new
@order = current_user.orders.new
end
def create
@order = current_user.orders.new(order_params)
@order.date = Date.today.to_s
if @order.save
# i think this is bad wrong to implementation of functional)
# params[:product_id].each do |detail_product_id|
# @order.order_details.product_id = detail_product_id
# @order.order_details.user_id = current_user
# @order.order_details.save
flash[:success] = "Order was successfully submitted"
redirect_to new_order_path
else
render :new
end
end
private
def order_params
params.require(:order).permit(:date, :product_id => [])
end
end
Моя схема:
create_table "order_details", force: true do |t|
t.integer "order_id"
t.integer "product_id"
t.integer "quantity"
t.integer "price"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "orders", force: true do |t|
t.integer "user_id"
t.date "date"
end
add_index "orders", ["user_id"], name: "index_orders_on_user_id", using: :btree
create_table "orders_products", id: false, force: true do |t|
t.integer "order_id"
t.integer "product_id"
end
create_table "products", force: true do |t|
t.string "product_name"
t.integer "product_price"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.boolean "available_status"
t.string "product_type"
end
вам может понадобиться [nested_attributes] (http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html) для этого –