分配会话变量而不保存到数据库

时间:2013-01-11 21:23:29

标签: ruby-on-rails ruby

我正在尝试设置类似购物车的东西,而我所拥有的是一个表单,用于选择有多少人可能想要购买的每件衬衫。我计划拥有XXS,XS,S,M,L,XL和XXL,他们选择每个数量并将其添加到购物车。我能想到的最简单的方法是使用t.integer“size_ ??”对于'tshirt'的数据库中的每个大小,并且在用户单击添加到购物车之后,该数字然后存储在会话中,直到他们的付款被批准,在这种情况下,然后将其保存到数据库。然后有人可以稍后查看数据库以查看下达的订单。 (这将用于制作定制衬衫,因此数据库中不会保存任何需要查看或列出的“示例”。)

我的第一个问题是,如果这是正确的。我想过使用“Shirts has_many Sizes”的方法,但我并不是最熟悉它,如果我想要达到的只是获得一个数量,我觉得这可能有点矫枉过正。

我的第二个问题是:如果我有一个表格来选择每个的数量,我该如何将值分配给会话变量。我的第一个想法是这样的方法:

new_order.html.erb:
<%=  form_for(:shirt, :url => {:action => 'save_to_session'}) do |f| %>
<table summary="New shirt order form">
<tr>    
    <th>Size S:</th>
</tr>
<tr>
    <td><%= f.select(:size_s, 0..99) %> </td>
</table>

  <%= submit_tag("Place order") %>

<% end %>

并在控制器端

  def new_order
    @temp_order = Shirt.new
    @temp_order.size_s = 0
  end

  def save_to_session
    session[:shirt_size_s] = @temp_order.size_s
    redirect_to(:action => 'show_session')
  end

  def show_session

  end

show_session只会吐出会话[:shirt_size_s]

我得到的错误是

  

nil的未定义方法`size_22':NilClass

也许这是禁忌,因为它似乎是一种非常简单的方法,但这不会改变会话值。如果我将以下行添加到save_to_session它可以工作,所以我想也许save_to_session无法访问@temp_order,但我还处于学习阶段,并且不知道这里出了什么问题。

session[:shirt_size_s] = 12

1 个答案:

答案 0 :(得分:0)

您的@temp是一个实例变量,通常用于填充页面而不用于检索数据。您希望使用params [:field1],其中field1将是您选择的名称。