【问题标题】:rails, nested associated models AR queryrails,嵌套关联模型 AR 查询
【发布时间】:2014-11-12 04:57:27
【问题描述】:

我有一个用户模型和一个帖子模型。用户拥有多个帖子;发布属于用户的帖子。

我想创建一个表格,列出用户和每个用户的帖子总数,只要帖子的 public_flag 为“t”。这可以直接在视图中吗?

在我的控制器中:

@users = User.all

在我看来:

<% @users.each do |user| %>
<%= user.posts.size%>
<% end %>

当然,无论 public_flag 是否为真,这都会获取用户的所有帖子。有没有办法在视图中设置条件,或者我需要在控制器中做一些花哨的事情(AR Query?)。

提前感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails ruby activerecord model associations


    【解决方案1】:

    您可以对模型进行菊花链限制,如下所示:

    user.posts.where(:public_flag => 't').count
    

    使用count 优于size 的优势在于,ActiveRecord 不会将所有帖子拉入内存并对其进行计数,而是对数据库执行计数查询并节省大量处理。

    【讨论】:

    • 太棒了!谢谢,詹姆!还要感谢关于计数与大小的额外说明。干杯!
    【解决方案2】:
    user.posts.find_by_public_flag(true).count
    

    【讨论】:

    • 这个解决方案从数据库中提取所有匹配的记录,强制rails为它们实例化对象,只是为了计算它们。使用 count 而不是 `size 可以解决这个问题。
    • 同意,刚刚看到你的答案.. count 会更好:) 我已经更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多