我正在尝试设置诸如购物车之类的东西,而我所拥有的是一个表格,可以选择某人可能想要购买的每种尺寸衬衫的数量。我计划有 XXS、XS、S、M、L、XL 和 XXL,他们选择每种数量并将其添加到购物车中。我能想到的最简单的方法是有一个 t.integer "size_??" 对于“tshirt”数据库中的每种尺寸,在用户单击添加到购物车后,该数字将存储在会话中,直到他们的付款被批准,在这种情况下,它会被保存到数据库中。然后有人可以稍后查看数据库以查看下了什么订单。(这将用于制作定制衬衫,因此数据库中不会保存需要查看或列出的“示例”)。
我的第一个问题是这是否正确。我想过使用“衬衫 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 只是吐出 session[:shirt_size_s]
我得到的错误是
nil:NilClass 的未定义方法“size_22”
也许这是禁忌,因为它似乎是一种非常简单的方法,但这不会改变会话值。如果我将以下行添加到 save_to_session 它可以工作,所以我想也许 save_to_session 无权访问@temp_order,但我仍处于学习阶段并且不完全知道这里出了什么问题。
session[:shirt_size_s] = 12