gpt4 book ai didi

sql - 是否可以在 "add"方法/子句中与 `scope` 方法相关的 `where` SQL 子句?

转载 作者:数据小太阳 更新时间:2023-10-29 08:09:58 28 4
gpt4 key购买 nike

我正在使用 Ruby on Rails 3.2.2,并且正在试验 Squeel gem。我想知道(以某种方式,通过使用 Squeel gem 或不)是否可以在 where< 中“直接”“添加”与 scope 方法相关的 SQL 子句 子句。也就是说,我有:

class Article < ActiveRecord::Base
# Note: This is a scope method.
def self.created_by(user)
where(:user_id => user.id)
end

# I would like to use a scope method like the following.
#
# Note: Code in the following method doesn't work, but it should help
# understanding what I mean.
def self.scope_method_name(user)
where{ created_by(user) | ... & ... }
end
end

因此,当我运行 Article.scope_method_name(@current_user).to_sql 时,它应该返回如下内容:

SELECT articles.* FROM articles WHERE articles.user_id = 1 OR ... AND ...

我试过了 sifters但那些(至少对我而言)旨在在其他 Squeel 语句中专门使用。也就是说,如果我声明一个筛选器,那么我不能使用它来限定 ActiveRecord 的范围,因为该筛选器返回一个 Squeel::Nodes::Predicate 对象而不是一个 ActiveRecord::Relation.

最佳答案

您必须下降到更多原始 AREL 以进行 OR 操作

def self.scope_method_name(user)
t = arel_table
where(
(t[:user_id].eq(user.id).or(
t[:blah].eq('otherthing')
).and([:bleh].eq('thirdthing'))
)
end

或者类似的东西。

关于sql - 是否可以在 "add"方法/子句中与 `scope` 方法相关的 `where` SQL 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11194587/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com