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