2

私はショッピング カートのようなものをセットアップしようとしています。私が持っているのは、誰かが購入したい各サイズのシャツを何枚選ぶかを選択するためのフォームです。XXS、XS、S、M、L、XL、XXLを用意する予定で、それぞれの数量を選択してカートに追加します。これを行う最も簡単な方法は、t.integer "size_??" を持つことでした。「tshirt」のデータベース内のサイズごとに、ユーザーがカートに追加をクリックした後、支払いが承認されるまでその数字がセッションに保存されます。承認された場合、データベースに保存されます。その後、だれかが後でデータベースを表示して、どのような注文が行われたかを確認できます。(これはカスタム シャツを作成するためのものであるため、表示または一覧表示する必要があるデータベースに保存された「例」はありません)。

私の最初の質問は、それが正しいかどうかです。「シャツには_多くのサイズがあります」というアプローチを使用することを考えましたが、私はそれに最も慣れていません。また、達成しようとしているのが数量を取得することだけである場合、それは少しやり過ぎかもしれないと感じています.

2 番目の質問は次のとおりです。それぞれの数量を選択するフォームがある場合、値をセッション変数に割り当てるにはどうすればよいですか。私の最初の考えは、次のようなアプローチでした。

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:NilClass の未定義のメソッド `size_22'

これは非常に単純なアプローチのように見えるため、おそらくタブーですが、これによってセッションの値が変更されることはありません。次の行を save_to_session に追加すると機能するので、save_to_session は @temp_order にアクセスできないのではないかと考えていますが、まだ学習段階にあり、ここで何が問題なのか正確にはわかりません。

session[:shirt_size_s] = 12
4

1 に答える 1

0

あなたの @temp は、通常、ページの入力に使用されるインスタンス変数であり、データの取得には使用されません。そのために params[:field1] を使用する必要があります。ここで、field1 は選択した名前になります。

于 2013-01-11T23:05:34.897 に答える