【发布时间】:2021-02-22 12:56:59
【问题描述】:
我有模型User 和User 有列provider。
提供者可以是google、facebook 或nil。
我想创建范围,它将输出所有用户,除了提供者 google 和比 some time 更早的用户。
我尝试使用两个范围:
scope :not_google_authorised, -> { where(provider: [nil, 'facebook']) }
scope :newest_google, -> { where(provider: 'google').where("created_at < ?", Time.now)}
...
users = User.not_google_authorised
users << User.newest_google
它得到了正确的结果,但它改变了users 的类。
我需要users 将是活动记录关系,而不是数组。
我试过了:
users = User.not_google_authorised
users.merge(User.newest_google)
#or
users.or(User.newest_google)
但这对我不起作用。
我怎样才能结合这 2 个作用域,所以 users 将是 activerecord 关系,或者我怎样才能写一个作用域而不是他们的?
我使用 ruby v3.3.7 和 rails v4.1
【问题讨论】:
-
您可以尝试在 where 中组合查询。
User.where("provider IN (?) OR (provider = ? AND created_at > ?)", [nil, 'facebook'], 'google', Time.now)这只是一个草稿,但希望能有所帮助:D
标签: ruby-on-rails rails-activerecord