“未定义的方法`每个'为'2,1':字符串”使用@ partner.products关联?

时间:2012-05-28 22:45:50

标签: ruby-on-rails-3 activerecord

我有一个部分文件,我想要显示特定合作伙伴的所有产品。 这是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'代表“2,1”:字符串 它说它在这一行:&lt;%@ products.each do | prod |%&gt;

但我没有看到问题.. 这是我的控制器:

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

更新2 伙计们,非常感谢你的帮助,并且在@thesis的帮助下我明白了。 这实际上是我以前没有想过的东西,这里没有描述这个问题。 当我在另一页中选择产品时,我的会话管理员帮我保留了表格! 那是在酝酿它!

2 个答案:

答案 0 :(得分:1)

你的问题非常简单。您必须修复active_products方法,因为它返回String。在您的情况下,字符串为"2,1"但您必须返回产品集合,以使用each方法进行迭代。

如需其他帮助,请更新您的问题,并从active_products模型中添加Partner实例方法。

答案 1 :(得分:1)

你真的有数字“2,1”的产品吗?

@ partner.active_products理想情况下应该返回ActiveRecord :: Relation,因此它应该迭代Product类的对象。

请浏览http://guides.rubyonrails.org/

在此之前,您可能希望搜索“红宝石哲学”和“铁杆哲学”