首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >eRuby -在比较if语句中的数字时,不隐式地将nil转换为字符串。

eRuby -在比较if语句中的数字时,不隐式地将nil转换为字符串。
EN

Stack Overflow用户
提问于 2018-04-19 14:18:39
回答 1查看 24关注 0票数 0

我有一个基本的eRuby每个循环

代码语言:javascript
复制
 <% @product_images.each do |image|%>

        <% if @counter < 4 %>

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

           <% return %>
        <% end %>

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

 <% end %>

在我的循环中,我有一个if语句,它检查@counter是否是<而不是4

控制器码

代码语言:javascript
复制
def show

     productId = params[:id]

     @product_images = ProductImage.where("product_id = ?", productId)

     @counter = 0
end

当我运行这段代码时,它应该在计数器大于4之后返回,但是我得到了一个错误,上面写着no implicit conversion of nil into String

这是非常直接的代码,我似乎不知道我做错了什么。好像是冲破了队伍

代码语言:javascript
复制
<% if @counter < 4 %>

以下是错误的图片:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-19 15:20:01

看起来,您正在试图限制视图中呈现的@product_images的数量。与其使用@counter,不如简单地限制控制器中的@product_images数量,如下所示:

代码语言:javascript
复制
def show
  @product = Product.find_by(id: params[:id])
  @product_images = @product.product_images.limit(4)
end

然后在你看来,做这样的事情:

代码语言:javascript
复制
<% @product_images.each do |image| %>
  # do stuff
<% end %>

这自然地假定:

代码语言:javascript
复制
class Product < ActiveRecord::Base 
  has_many :product_images
end

和:

代码语言:javascript
复制
class ProductImage < ActiveRecord::Base
  belongs_to :product
end

你可以把这个逻辑放回视图中,比如:

代码语言:javascript
复制
<% @product.product_images.limit(4).each do |image| %>
  # do stuff
<% end %>

然后,您的show操作可以是:

代码语言:javascript
复制
def show
  @product = Product.find_by(id: params[:id])
end

但是,我更喜欢把它放在控制器中,以减少视图和模型之间的耦合。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49923422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档