我有一个基本的eRuby每个循环
<% @product_images.each do |image|%>
<% if @counter < 4 %>
<% p 'Im in here' %>
<% else %>
<% return %>
<% end %>
<% @counter += 1 %>
<% p @counter %>
<% end %>在我的循环中,我有一个if语句,它检查@counter是否是<而不是4。
控制器码
def show
productId = params[:id]
@product_images = ProductImage.where("product_id = ?", productId)
@counter = 0
end当我运行这段代码时,它应该在计数器大于4之后返回,但是我得到了一个错误,上面写着no implicit conversion of nil into String
这是非常直接的代码,我似乎不知道我做错了什么。好像是冲破了队伍
<% if @counter < 4 %>以下是错误的图片:

发布于 2018-04-19 15:20:01
看起来,您正在试图限制视图中呈现的@product_images的数量。与其使用@counter,不如简单地限制控制器中的@product_images数量,如下所示:
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 %>这自然地假定:
class Product < ActiveRecord::Base
has_many :product_images
end和:
class ProductImage < ActiveRecord::Base
belongs_to :product
end你可以把这个逻辑放回视图中,比如:
<% @product.product_images.limit(4).each do |image| %>
# do stuff
<% end %>然后,您的show操作可以是:
def show
@product = Product.find_by(id: params[:id])
end但是,我更喜欢把它放在控制器中,以减少视图和模型之间的耦合。
https://stackoverflow.com/questions/49923422
复制相似问题