0

特定のパートナーのすべての製品を表示したいパーツファイルがあります。これがhtml.erbです:

<% unless @products.nil? %>
        <% @products.each do |prod|%>
            <tr id="p_<%= prod.id%>">
                <td><%= prod.name %></td>
                <td><%= prod.price %></td>
                <td><%= number_field_tag "product_qty_input[#{prod.id}]", get_offer_product_qty(@offer.id, prod.id),:min => 0, :max => 99 %></td>
                <td>X</td>
            </tr>
        <% end %>
    <% end %>

しかし、私はエラーを受け取り続けます:「2,1」の未定義のメソッド `each':文字列それはこの行にあると言います:<%@ products.each do | prod |%>

しかし、問題はわかりません。これが私のコントローラーです。

def select_products
    @partner = Partner.find(params[:partner_id])
    if params[:id] == "-1"
      @offer = nil
    else
      @offer = Offer.find(params[:id])
    end

    @select_callback = url_for( @offer.nil? ? new_partner_offer_path(@partner) : [:edit, @partner, @offer] ) 
    @products = @partner.active_products
    @num_select = PRODS_PER_OFFER

    respond_to do |format|
      format.html { render :template => "products/select"}
    end
  end

@products = @partner.active_productsメソッドがあるのがわかりますが、それがそこに到達したかどうかを確認するために変更しましたが、そうではないので、以前は何かである必要があります...

私はどんな助けにも感謝します。

前もって感謝します

アップデート

方法は次のactive_productsとおりです。

def active_products
    self.products.where("active IS NOT NULL AND active = true")
end

文字列ではなくオブジェクトを返す必要があります何が間違っていますか?ありがとう@thesis

UPDATE 2 みんな、助けてくれてありがとう、そして@thesisの助けを借りて私はそれを理解した。それは実際には私が前に考えたことのないものであり、ここでの質問では説明されていませんでした。別のページで製品を選択したときに、セッションキーパーがフォームを維持するのを手伝ってくれました。それはそれを台無しにしていた!

4

2 に答える 2

1

あなたの問題は非常に単純です。active_productsを返すため、メソッドを修正する必要がありますString。あなたの場合、文字列はありますが、メソッド"2,1"で反復するには、製品のコレクションを返す必要があります。

追加のヘルプが必要な場合は、質問を更新し、モデルactive_productsからインスタンス メソッドを追加してください。Partner

于 2012-05-28T22:50:10.977 に答える
1

「2,1」という数字の商品は本当にありますか?

@partner.active_products は理想的には ActiveRecord::Relation を返す必要があるため、Product クラスのオブジェクトを反復する必要があります。

http://guides.rubyonrails.org/をご覧ください

その前に、「Ruby 哲学」と「Rails 哲学」を検索してみてください。

于 2012-05-29T07:18:35.747 に答える