在用rails编写的用于购买活动门票的预订引擎中,我有以下模型:
一份订单
一张票
一张订单有多张票,一张票属于一个活动。
想要预订活动门票的人通常会创建一个新订单。他们填写了一些详细信息(保存在订单模型中),最后看到一些下拉列表,他们可以在这些下拉列表中选择每种票证类型的票证数量(例如: VIP门票、学生门票等)。
屏幕截图可以在这里找到:
http://eerlings.com/orders.png
我想实现的是,当订单在数据库中创建时,对于每个票证类型,都有一个在数据库中创建的票证,链接到此订单。如果与会者在下拉列表中为VIP门票选择了"5“,为学生门票选择了"3”,则在数据库中总共应该创建了8张门票。
在rails中实现这一点的最佳方式是什么?有什么建议吗?
再见,皮特
发布于 2010-12-17 04:34:56
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发布于 2010-12-17 04:23:13
https://stackoverflow.com/questions/2544266
复制相似问题