2013-01-11 64 views
2

我試圖設置類似於購物車的東西,而我擁有的是一種表單來選擇每個尺寸襯衫中有多少人可能想要購買。我計劃擁有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]

錯誤林與得到的是

未定義的方法`size_22' 的零:NilClass

也許這是一個禁忌,因爲它似乎是一個非常簡單的方法,但這不會改變會話值。如果我將以下行添加到save_to_session中,它可以工作,所以我在想也許save_to_session無法訪問@temp_order,但我仍處於學習階段,並且不完全知道這裏出了什麼問題。

session[:shirt_size_s] = 12 

回答

0

您的@temp是一個實例變量,通常用於填充頁面並且不用於檢索數據。你想使用params [:field1]作爲你選擇的名字。

+0

太好了,謝謝!這工作,使用會議[:shirt_size_s] = params [:襯衫] [:size_s] – cadlac

相關問題