3

Rails 3rd Ed. を使用したアジャイル Web 開発を取り上げたところです。デポ アプリケーションの章を読んでいます。製品/アイテムのオプションについて質問があります。

製品カタログとストアを変更して、製品にオプション (サイズ、色など) を追加したい場合、どこでどのように変更すればよいですか?

たとえば、T シャツを販売していて、さまざまなサイズがあるとします。サイズを扱うために作成されたモデルが本当に必要なものだとは思わないので、ストアのビューのhtmlで選択ボックスとして追加するだけでよいと思いました。

しかし、各 [カートに追加] ボタンは、button_to によって自動的に生成されるフォーム タグによってラップされており、追加のパラメーターをカートに渡すことができないようです。add_to_cart への POST に追加されたアイテムのサイズを取得するにはどうすればよいですか?

そして、おそらくもっと重要なことは、これを行うための最も Railsy な方法は何でしょうか?

助けてくれてありがとう! - マーク

私の見解ではヘルパー:

<%= button_to "Add to Cart" , :action => :add_to_cart, :id => product %>

生成されるフォーム:

<form method="post" action="/store/add_to_cart/3" class="button-to">

4

4 に答える 4

4

わかりました、それは2日後です、そして私はそれを理解しました. これは私がしなければならなかったことです-

1、私のストア ビューで:

<% form_for @product, :url => {:action => "add_to_cart", :id => @product} do |f| %>
  <select name="productsize" id="productsize">
    <option value="L">L</option>
    <option value="XL">XL</option>
  </select>
  <%= f.submit 'Add to Cart' %>
<% end %>

2、ストアコントローラーに追加:

productsize = params[:productsize]
@cart.add_product(product, productsize)

params から productsize を取得し、残りの製品モデルと一緒にカート モデルの add_product アクションに渡す必要がありました。

3、引数を受け入れるようにカートモデルを調整し、さらに:

@items << CartItem.new(product, productsize)

新しいカート アイテムを作成してアイテムに追加するために、残りの製品モデルと一緒に渡します。

4、cart_item モデルに追加:

attr_reader :product, :quantity, :productsize

def initialize(product, productsize)
@product = product
@productsize = productsize

productsize を読み込み、Cart Item を初期化します。

5、add_to_cart ビューに追加:

Size: <%=h item.productsize %>

ユーザーに表示するため。

それでおしまい。もっと簡単でドライな方法があるとすれば、私はすべて耳 (目?) です。

于 2008-11-11T04:28:00.633 に答える
1

商品ではなくcart_itemの一部としてサイズを保存するという意味でない限り、サイズを保存しない理由はわかりません。その場合、次のようにします。

<% form_for(@cart_item) do |f| %>
<%= f.select :size, ['S', 'M', 'L', 'XL', 'XXL'] %>
<%= f.hidden_field :product_id, :value => @product.id %> 
# other properties...
<%= f.submit 'Add to Cart' %>
<% end %>
于 2008-11-10T16:37:50.363 に答える
0

モデルに属性を追加する必要があります。そのためには、移行を作成してデータベース テーブルを更新する必要があります。私はこの本の第 2 版しか持っていませんが、これを行う方法を説明する「反復 A2: 不足している列を追加する」というセクションがあります。同様のセクションが第 3 版にあると思います。

その後、Can Berk Güder の提案に従って、ボタンをフォームに置き換えることができます。

于 2008-11-10T14:08:50.040 に答える
0

button_toヘルパーを削除し、適切なフォームを使用して、製品のプロパティをadd_to_cartアクションに送信します。

<% form_for(@product) do |f| %>
<%= f.select :size, ['S', 'M', 'L', 'XL', 'XXL'] %>
# other properties...
<%= f.submit 'Add to Cart' %>
<% end %>
于 2008-11-09T16:34:58.577 に答える