与非类/模块错误相比

问题描述 投票:0回答:1

我试图通过仅在相册数量大于 3 时显示新相册的链接来限制用户可以创建的相册数量。我收到的错误是“与非类/模块相比”

<% if @albums < 3 %>

     <div class="all-albums" id="position-albums">
        <%= link_to 'New Album', "/albums/new", :style => "text-decoration:none; color:black; font-size: 20px;" %>
        <div class="plus-sign">
            <%= link_to '+', "/albums/new", :style => "text-decoration:none; color:black; font-size:80px; color:#85adad;" %>
        </div>
     </div>

<% end %>
ruby-on-rails ruby activerecord typeerror rails-activerecord
1个回答
10
投票

如果

@albums
是 AR 集合,您可以调用
size
length
count
方法来识别其中对象的数量。例如:

<% if @albums.size <= 3 %>

此外,根据您的帖子,您应该使用

<=
而不是
<

这3种方法各有不同,您应该根据自己的情况选择您需要的一种:

  • 调用

    count
    (不带块)将执行
    SELECT COUNT(*)
    查询。如果您从数据库获取最新的计算结果至关重要,而不是使用基于加载结果的缓存版本,或者您实际上不需要记录本身,只需要计数计算,则应该使用此方法。

  • 调用

    length
    将执行
    SELECT *
    查询并在结果集合上调用
    size
    方法(不会对数据库产生任何进一步的查询)。无论如何,如果您要使用基础记录,这是更好的选择。

  • 在尚未加载的集合上调用

    size
    将执行
    SELECT COUNT(*)
    。否则,将在加载的集合上调用
    size
    方法(不会对数据库产生任何进一步的查询)。

© www.soinside.com 2019 - 2024. All rights reserved.