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 %>

但我不断收到错误:未定义的方法 `each' for "2,1":String 它说它在这一行:<% @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

它应该返回对象而不是字符串我做错了什么?谢谢@论文

更新 2 伙计们,非常感谢您的帮助,在@thesis 的帮助下,我想通了。这实际上是我以前从未想过的事情,问题中也没有描述。当我在另一个页面中选择产品时,我的 sessionkeeper 帮助我保留了我的表格!那是在搞砸!

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 回答