我有一个部分文件,我想要显示特定合作伙伴的所有产品。 这是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的帮助下我明白了。 这实际上是我以前没有想过的东西,这里没有描述这个问题。 当我在另一页中选择产品时,我的会话管理员帮我保留了表格! 那是在酝酿它!
答案 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/
在此之前,您可能希望搜索“红宝石哲学”和“铁杆哲学”