Ruby on rails eRuby-在if语句中比较数字时,不会将nil隐式转换为字符串

Ruby on rails eRuby-在if语句中比较数字时,不会将nil隐式转换为字符串,ruby-on-rails,ruby,eruby,Ruby On Rails,Ruby,Eruby,我有一个基本的循环 <% @product_images.each do |image|%> <% if @counter < 4 %> <% p 'Im in here' %> <% else %> <% return %> <% end %> <% @counter += 1 %>

我有一个基本的循环

 <% @product_images.each do |image|%>

        <% if @counter < 4 %>

           <% p 'Im in here' %>
        <% else %>

           <% return %>
        <% end %>

          <% @counter += 1 %>
          <% p @counter %>

 <% end %>
当我运行这段代码时,当计数器大于4时,它应该返回,但是我得到一个错误,它说
没有将nil隐式转换为字符串

这是一个非常直截了当的代码,我似乎不知道我做错了什么。好像它在排队

<% if @counter < 4 %>

下面是错误的图片:


看起来您正试图限制视图中呈现的
@product\u图像的数量。您不应使用
@计数器
,而应简单地限制控制器中
@product\u图像
的数量,例如:

def show
  @product = Product.find_by(id: params[:id])
  @product_images = @product.product_images.limit(4)
end
<% @product_images.each do |image| %>
  # do stuff
<% end %>
然后在你看来,做一些类似的事情:

def show
  @product = Product.find_by(id: params[:id])
  @product_images = @product.product_images.limit(4)
end
<% @product_images.each do |image| %>
  # do stuff
<% end %>

但是,我更喜欢将其保留在控制器中,以减少视图和模型之间的耦合。

您是否试图将产品图像限制为不超过四个?如果是这样,您应该在控制器中使用
@product\u images
,然后在视图中使用所有这些逻辑。(或者,也许你正在做一些我们从你提供的代码中看不到的事情。)@jvillian是的,我基本上是在为产品构建一个图像库,所以我需要显示4个,然后是第5个,当单击它时,将打开一个包含所有图像的模式。我想我可以创建一个4个数组,然后再创建一个包含所有这些数组的数组来实现这一点。谢谢你的建议,我将尝试一下。@jvillian你推荐的方法非常有效,如果你想把它作为答案提交给我,我可以接受。再次感谢你的帮助。
class ProductImage < ActiveRecord::Base
  belongs_to :product
end
<% @product.product_images.limit(4).each do |image| %>
  # do stuff
<% end %>
def show
  @product = Product.find_by(id: params[:id])
end