Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails问题:如何在parents create窗体中使用select下拉菜单创建链接到父对象的多个子对象?_Ruby On Rails_Forms_Model_Nested - Fatal编程技术网

Ruby on rails rails问题:如何在parents create窗体中使用select下拉菜单创建链接到父对象的多个子对象?

Ruby on rails rails问题:如何在parents create窗体中使用select下拉菜单创建链接到父对象的多个子对象?,ruby-on-rails,forms,model,nested,Ruby On Rails,Forms,Model,Nested,在用rails编写的用于购买活动门票的预订引擎中,我有以下模型: 命令 票 一个订单有很多票,一张票属于一个事件 想要预订活动门票的人通常会创建新订单。他们填写一些详细信息(保存在订单模型中),最后他们看到一些下拉列表,可以从中选择每种票类型的票数(例如:VIP票、学生票等) 可在此处找到屏幕截图: 我想实现的是,当在DB中创建订单时,对于每种票证类型,都会在DB中创建一个与此订单链接的票证。如果与会者在下拉列表中为VIP票选择“5”,为学生票选择“3”,则DB中总共应创建8张票 在rails

在用rails编写的用于购买活动门票的预订引擎中,我有以下模型:

命令

一个订单有很多票,一张票属于一个事件

想要预订活动门票的人通常会创建新订单。他们填写一些详细信息(保存在订单模型中),最后他们看到一些下拉列表,可以从中选择每种票类型的票数(例如:VIP票、学生票等)

可在此处找到屏幕截图:

我想实现的是,当在DB中创建订单时,对于每种票证类型,都会在DB中创建一个与此订单链接的票证。如果与会者在下拉列表中为VIP票选择“5”,为学生票选择“3”,则DB中总共应创建8张票

在rails中实现这一点的最佳方法是什么?有什么建议吗

再见, 彼得参见这个问题: 请看这个问题:
VIP票和学生票可能会有单独的参数,比如

params = {
          :num_vip_tickets => 5,
          :vip_ticket => {
                          :event_id => 1,
                          :price => 250
                         },
          :num_student_tickets => 3,
          :student_ticket => {
                              :event_id => 1,
                              :price => 10
                             }
         }
我会在控制器里处理。例如,使用一些假名:

if params[:num_vip_tickets]
  params[:num_vip_tickets].to_i.times {@order.tickets.create params[:vip_ticket]}
end
另一种方法是

class Order < ActiveRecord::Base
  has_many :tickets
  accepts_nested_attributes_for :tickets
end

class OrdersController < ApplicationController
  def create
    params[:order][:ticket_attributes] = []
    num_student_tickets = params[:num_student_tickets].to_i
    if num_student_tickets > 0
      params[:order][:tickets_attributes] += [params[:student_ticket]] * num_student_tickets
    end
    num_vip_tickets = params[:num_vip_tickets].to_i
    if num_vip_tickets > 0
      params[:order][:tickets_attributes] += [params[:vip_ticket]] * num_vip_tickets
    end
    @order = Order.new params[:order]
    # ... etc ...
  end
end
类顺序0
参数[:顺序][:票证属性]+=[参数[:学生票证]]*num\u学生票证
结束
num\u vip\u tickets=params[:num\u vip\u tickets]。to\u i
如果vip门票数量>0
参数[:顺序][:票证属性]+=[参数[:vip票证]]*num\u vip票证
结束
@订单=订单。新参数[:订单]
# ... 等
结束
结束

VIP票和学生票可能有单独的参数,比如

params = {
          :num_vip_tickets => 5,
          :vip_ticket => {
                          :event_id => 1,
                          :price => 250
                         },
          :num_student_tickets => 3,
          :student_ticket => {
                              :event_id => 1,
                              :price => 10
                             }
         }
我会在控制器里处理。例如,使用一些假名:

if params[:num_vip_tickets]
  params[:num_vip_tickets].to_i.times {@order.tickets.create params[:vip_ticket]}
end
另一种方法是

class Order < ActiveRecord::Base
  has_many :tickets
  accepts_nested_attributes_for :tickets
end

class OrdersController < ApplicationController
  def create
    params[:order][:ticket_attributes] = []
    num_student_tickets = params[:num_student_tickets].to_i
    if num_student_tickets > 0
      params[:order][:tickets_attributes] += [params[:student_ticket]] * num_student_tickets
    end
    num_vip_tickets = params[:num_vip_tickets].to_i
    if num_vip_tickets > 0
      params[:order][:tickets_attributes] += [params[:vip_ticket]] * num_vip_tickets
    end
    @order = Order.new params[:order]
    # ... etc ...
  end
end
类顺序0
参数[:顺序][:票证属性]+=[参数[:学生票证]]*num\u学生票证
结束
num\u vip\u tickets=params[:num\u vip\u tickets]。to\u i
如果vip门票数量>0
参数[:顺序][:票证属性]+=[参数[:vip票证]]*num\u vip票证
结束
@订单=订单。新参数[:订单]
# ... 等
结束
结束

谢谢,最后我按照你的建议在控制器中处理了它。谢谢,最后我按照你的建议在控制器中处理了它。