我正在尝试将事件注册添加到当前或新订单中。 帖子末尾的问题。
活动模型:包含标题,日期,说明等基本活动信息。此事件模型有许多事件选项。
活动选项:包含说明和价格。此事件选项有许多注册。
注册:允许用户注册,并从事件选项价格中获取价格。此注册属于事件选项和订单模型。
订单:根据与其关联的所有注册的总和计算订单总数。
创建新注册 在事件选项显示页面中,我有一个使用remote:true。
创建新注册的表单以下表格:
<%= form_for(@registration, remote: true) do |f| %>
<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :lastname %><br>
<%= f.text_field :lastname %>
</div>
<div class="field">
<%= f.label :event_option_id %><br>
<%= f.text_field :event_option_id, value: @event_option.id %>
</div>
<div class="field">
<%= f.label :order_item_id %><br>
<%= f.text_field :order_item_id%>
</div>
<div class="field">
<%= f.label :price %><br>
<%= f.text_field :price, value: @event_option.price%>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
提交表单时,它会创建事件,如果订单不存在,还会创建新订单。要创建新订单,我在应用程序控制器中有这个帮助方法:
def current_order
if !session[:order_id].nil?
Order.find(session[:order_id])
else
Order.new
end
end
这是注册控制器中的create方法:
def create
@order = current_order
@registration = Registration.new(registration_params)
@order_id = current_order.id
respond_to do |format|
if @registration.save
format.html { redirect_to @registration, notice: 'Registration was successfully created.' }
format.json { render :show, status: :created, location: @registration }
format.js {}
@order.save
session[:order_id] = @order.id
else
format.html { render :new }
format.json { render json: @registration.errors, status: :unprocessable_entity }
end
end
end
问题在于我无法在订单中添加注册。我猜这是因为注册是在订单之前创建的。 response_to块中if @ registration.save的最后两行正在保存订单。如何在订单中添加注册?是否可以同时创建新注册和新订单?
答案 0 :(得分:2)
解决此问题的一种简单方法是在保存订单之前将订单分配给订单...
@order.registrations << @registration
@order.save
或者,您可以在创建@registration记录时创建关联。
而不是......
@registration = Registration.new(registration_params)
...做
@registration = @order.registrations.build(registration_params)