Gra*_*ick 2 sql activerecord ruby-on-rails rails-activerecord ruby-on-rails-5
我正在使用 Rails 5.1+,我想根据两个条件查询模型,它可以有多个值,但总是两个两个。
假设我有一个User模型,它有一个first_name和last_name。我正在寻找具有以下任一特征的用户:
first_name: "John"
last_name: "Doe"
Run Code Online (Sandbox Code Playgroud)
或者
first_name: "Jane"
last_name: "Snow"
Run Code Online (Sandbox Code Playgroud)
我怎样才能写一个指定这个的查询?我总是可以生成一个 SQL 查询字符串,我会传递给一个where子句,但我想知道是否有更好的方法。
您可以尝试在模型中定义辅助方法并使用or方法(未测试):
class User
def self.where_in_pairs(values = [])
values.map { |(first_name, last_name)|
where(first_name: first_name, last_name: last_name)
}.reduce(:or)
end
end
Run Code Online (Sandbox Code Playgroud)
并像这样调用:
User.where_in_pairs([["John", "Doe"], ["Jane", "Snow"]])
Run Code Online (Sandbox Code Playgroud)
您也可以为此使用普通的 arel(已测试):
class User
def self.where_in_pairs(values = [])
where(
values.map { |(first_name, last_name)|
arel_table[:first_name].eq(first_name).and(
arel_table[:last_name].eq(last_name)
)
}.reduce(:or)
}
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
528 次 |
| 最近记录: |