条纹& Rails - 安全地将最终金额传递给收费控制器

时间:2013-12-02 13:20:17

标签: ruby-on-rails ruby ruby-on-rails-3 stripe-payments

我将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?

我希望一切都有道理吗?

0 个答案:

没有答案