简单形式- select 收集和设置 has_many 通过
Simple form- select collection and set up has_many through
如何将产品分为三部分(三个不同的过滤器如: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
你可以在你的控制器中做这样的事情:
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"
对于 select 集合并从表单中获取 3 个不同的 ID,这对我有用..
post:
~ products_ids => {数组 ID}
= 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")
如何将产品分为三部分(三个不同的过滤器如: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
你可以在你的控制器中做这样的事情:
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"
对于 select 集合并从表单中获取 3 个不同的 ID,这对我有用..
post: ~ products_ids => {数组 ID}
= 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")