ruby-on-rails - 使用 OR 组合多个命名范围

标签 ruby-on-rails ruby rails-activerecord named-scope

我正在尝试合并两个范围或向现有范围添加更多范围。

scope :public_bids, -> {
  where(status: [Status::ACCEPTED, Status::OUTBID, Status::SOLD, Status::NO_SALE],
        bid_type: [BidType::MANUAL, BidType::AUTO, BidType::LIVE])
scope :outbid_maxbids, -> {
  where(status: Status::OUTBID, bid_type: BidType::MAXBID)

我无法确定如何将它们OR 在一起或将它们合并到一个范围内。有什么建议/指导吗?我更希望将它们组合成一个范围。

最佳答案

我没有尝试在作用域中使用 or,但您可以使用 Rails 5 的新 or 方法将作用域链接在一起,如下所示:

scope :public_or_outbid, -> {
  where(status: [Status::ACCEPTED, Status::OUTBID, Status::SOLD, Status::NO_SALE], bid_type: [BidType::MANUAL, BidType::AUTO, BidType::LIVE])\
  .or(where(status: Status::OUTBID, bid_type: BidType::MAXBID))
}

(注意这只适用于 Rails 5)

您当然可以像这样将条件链接在一起:

MyObj.public_bids.or(MyObj.outbid_maxbids)

有关详细信息,请参阅此答案:Rails 5: ActiveRecord OR query

关于ruby-on-rails - 使用 OR 组合多个命名范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37445203/

相关文章:

python - 在 Ruby 中是否有 Python 的 vars() 方法的模拟?

Ruby,通过添加项目使具有排序数字系列的数组线性化,以保持差异低于或等于 X

ruby-on-rails - 跨越从形式到更有趣的对象的 Rails 学习和开发障碍

mysql - 编辑更改数据库中行的顺序后,Heroku DB 找不到行

sql - 获取用户搜索产品搜索结果

Ruby 字符串连接

ruby-on-rails - ActiveRecord 中的随机记录

ruby-on-rails - 如何从另一个模型预填充 ActiveAdmin 表单值?

ruby-on-rails - Ruby on Rails : :include on a polymorphic association with submodels

ruby-on-rails - 运行单个迁移文件