【问题标题】:Rails: ActiveRecord query regarding size of associationRails:关于关联大小的 ActiveRecord 查询
【发布时间】:2013-07-25 15:33:01
【问题描述】:

我试图弄清楚如何使用 ActiveRecord 生成特定查询。

我有以下型号

class Activity < ActiveRecord::Base
  attr_accessible :limit, ...      
  has_many :employees
end

class User < ActiveRecord::Base
  belongs_to :activity
end

每个活动都有一个限制,也就是说,一个整数属性包含可能属于它的最大用户数量。

我正在寻找一种方法来选择所有有可用位置的活动,即用户数量小于该限制的位置。

有什么想法吗?

谢谢

【问题讨论】:

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


    【解决方案1】:

    我认为要针对的 SQL 语法是:

    select *
    from   activities
    where  activities.limit > (
             select count(*)
             from   users
             where  users.activity_id = activities.id)
    

    在 Rails 中...

    Activity.where("activities.limit > (select count(*) from users where users.activity_id = activities.id)")
    

    不确定列名“limit”是否会给您带来问题,因为它是一个保留字。您可能必须在 SQL 中引用它。

    我还会认真考虑在活动表上为用户设置一个计数器缓存,这会使其性能更好。一些数据库仅支持用户计数器缓存

    【讨论】:

    • 谢谢,成功了!您对限制列是正确的,计数器缓存是简化这一点的好方法。
    【解决方案2】:
    Activity.all.select{|activity| activity.users.length < activity.limit }
    

    【讨论】:

    • 如果有很多活动,这可能会变得非常昂贵。加载 ActiveRecord 对象是 Rails 应用程序中最昂贵的事情之一!
    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    相关资源
    最近更新 更多