Как отображать продукты, разделенные на три части (три разных фильтра, например: product_1, product_2, product_3), и вам нужно выбрать только один продукт из каждой части

После отправки. Я должен сохранить все эти продукты для одного заказа.

У меня есть 4 таблицы: Пользователи Заказы Order_details Продукты

class Order < ActiveRecord::Base
  has_many :order_details
  belongs_to :user
  has_many :products, through: :order_details
  accepts_nested_attributes_for :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
  def self.get_first_course
    Product.where(product_type: "exem_product_1")
  end
  def self.get_main_course
    Product.where(product_type: "exem_product_2")
  end
  def self.get_drink
    Product.where(product_type: "exem_product_3")
  end
end

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

class OrdersController < ApplicationController
 before_action :authenticate_user!
 def index
   @order = Order.new
   #I think need something like this..?!
   #@order.order_details.build
 end

 def create

 end

 private

 def order_params
   params.require(:order).permit(:date, :product_id => [])
 end
end
0
mix-fGt 27 Апр 2016 в 22:35

2 ответа

Лучший ответ

Для выбора коллекции и получить 3 разных идентификатора из формы, которая работает для меня ..

Post: ~ products_ids => {array ids}

= simple_form_for @order do |f|
 = render 'shared/error_messages', object: f.object
 = simple_fields_for :product_ids do |product|
   = product.collection_select(nil, Product.get_first_course, :id, :product_name,
                              {prompt: "Select first course" },class: "form-control product-select")
   = product.collection_select(nil, Product.get_main_course, :id, :product_name,
                          {prompt: "Select first course"},class: "form-control product-select")
0
mix-fGt 5 Май 2016 в 07:22

Вы можете сделать что-то вроде этого в вашем контроллере:

class OrdersController < ApplicationController
 before_action :authenticate_user!
 def index
   @order = Order.all
 end

 def new
   @order = Order.new
 end

 def create
   @order = current_user.orders.new(order_params)
   if @order.save
    #your actions here
   else
    #your actions to rescue error
   end
 end

 private

 def order_params
   params.require(:order).permit(:date, :product_id => [])
 end
end

А чтобы использовать простую форму для коллекций переключателей, вам нужно сделать что-то вроде этого:

= simple_form_for(@order, html: {:class => 'well form-horizontal', :method  => :post, :action=> :create }) do |f|
 .col-xs-12.col-sm-6.col-md-8
   = render 'shared/error_messages', object: f.object
   = f.collection_radio_buttons :product_ids, Product.get_first_course, :id, :product_name, :item_wrapper_class => 'inline'
   %hr
   = f.collection_radio_buttons :product_ids, Product.get_main_course, :id, :product_name, :item_wrapper_class => 'inline'
   %hr
   = f.collection_radio_buttons :product_ids, Product.get_drink, :id, :product_name,,:item_wrapper_class => 'inline'
   %hr
   = f.association :products, as: :radio_buttons
   = f.button :submit, class: "btn btn-primary"
1
pyfl88 28 Апр 2016 в 06:13