我将Stripe付款整合到销售活动门票的网站中。
我不需要购物车,但在最终付款之前我会向用户提供摘要页面。
由于我的充电控制器,我无法弄清楚是通过总数的最佳方法。当然,我可以找到很方便传递价值的方法,但我很想知道别人的建议是最安全的做法。
所以,通过我的工作:
我的事件节目视图有以下形式,允许用户选择他们想要的票证(事件可以有多种票证类型),然后是数量。
<table class="table table-condensed">
<tr>
<th>Ticket Type</th>
<th>On Sale Until</th>
<th>Price</th>
<th>Quantity</th>
</tr>
<%= form_tag tickets_path do %>
<% @event.event_tickets.each do |ticket| %>
<tr>
<td><%= ticket.ticket_type_name %></td>
<td><%= ticket.off_sale_date.to_formatted_s(:my_format) %></td>
<td><%= ticket.price %></td>
<td>
<%= select_tag "qty[#{ticket.id}]", "<option>1</option><option>2</option><option>3</option><option>4</option>".html_safe, :class => "input-mini select-mini" %><br>
<%= hidden_field_tag "ticket_id[]", ticket.id %>
</td>
</tr>
<% end %>
</table>
<%= submit_tag 'Buy Tickets', :class => 'btn btn-success' %>
<% end %>
我的事件控制器有一个票据操作,其唯一目的是计算并显示客户的总数(并最终显示摘要)。
def tickets
@event = Event.find_by_slug!(params[:id])
@sub_totals = []
@qty_array = []
@keys = params[:qty].each do |ticket_id,qty|
ticket_price = EventTicket.find(ticket_id)
@sub_totals.push(ticket_price.price.to_f * qty.to_i)
@qty_array.push(qty.to_i)
end
@total = @sub_totals.inject(:+)
end
Params传递的样子如下:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"abc123", "qty"=>{"4"=>"3", "5"=>"1"}, "ticket_id"=>["4", "5"], "commit"=>"Buy Tickets", "id"=>"test-with-tickets"}
我使用的主要参数是qty哈希,即&#34; ticket_id&#34; =&GT; &#34;数量&#34;
所以,我的下一步是将总数传递给我的费用控制器,但理论上我还需要票证ID和qtys。
我可能在这里自己回答这个问题,但是我应该首先将总计代码提取到一个模型方法,而不是传递总数,我可以根据&#来调用事件/故障单和费用/创建操作34; TICKET_ID&#34; =&GT; &#34;数量&#34;哈希?如果这是一个更好的方法,我应该如何安全地将该哈希从事件/故障单摘要传递到费用/创建操作,以便用户无法篡改ID和/或qtys?
我希望一切都有道理吗?