【问题标题】:Simple form- select collection and set up has_many through简单的表单-选择集合并通过设置has_many
【发布时间】:2016-04-27 19:35:24
【问题描述】:

如何显示分为三个部分的产品(三个不同的过滤器,例如:product_1、product_2、product_3),并且只需要从每个部分中选择一个产品

提交后。我应该为一个订单保存所有这些产品。

我有 4 张桌子: 用户 订单 订单详细信息 产品

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 simple-form has-many-through fields-for


    【解决方案1】:

    你可以在你的控制器中做这样的事情:

    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"
    

    【讨论】:

      【解决方案2】:

      用于选择集合并从表单中获取 3 个不同的 id,这对我有用..

      帖子: ~ 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")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多