eRuby - неявное преобразование nil в String при сравнении чисел в операторе if
У меня есть базовый 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 %>
Вот изображение ошибки:
1 ответ
Похоже, вы пытаетесь ограничить количество @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
Но я предпочитаю оставить его в контроллере, чтобы уменьшить связь между вашими взглядами и вашими моделями.