加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 使用参数绑定选择ActiveRecord

发布时间:2020-12-17 03:39:00 所属栏目:百科 来源:网络整理
导读:我想在ActiveRecord中使用子查询,如下所示: User.select( 'users.*,(select sum(amount) from subscriptions where subscriptions.user_id = user.id and created_at ? ) as amt)').order('amt') 但是,在倒数第二行,我遇到的问题是我无法弄清楚如何绑定Time
我想在ActiveRecord中使用子查询,如下所示:

User.select(
    'users.*,(select sum(amount) 
        from subscriptions 
        where subscriptions.user_id = user.id
        and created_at < ? ) as amt)'
).order('amt')

但是,在倒数第二行,我遇到的问题是我无法弄清楚如何绑定Time类参数,因为ActiveRecord :: Base的select方法不接受多个参数(sql字符串).我该怎么办?

解决方法

您可以使用 ActiveRecord::Sanitization class methods中的一个.

它们混合到ActiveRecord :: Base中,几乎都受到保护,因此通过在模型上定义类方法可以最方便地访问它们:

class User < ActiveRecord::Base
  def self.select_with_args(sql,args)
    query = sanitize_sql_array([sql,args].flatten)
    select(query)
  end
end

同样值得寻找其他方法来获取数据并将其性能与子查询方法进行比较.例如,您可以使用单独的查询来获取订阅计数:

subs_by_user = Subscription.group(:user_id).where('created_at < ?',d).count()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读