【问题标题】:Modify Ransack not_in query to include when field is nil修改 Ransack not_in 查询以包含字段为 nil 时
【发布时间】:2015-10-30 19:38:17
【问题描述】:

我正在像这样查询我的模型:

MyModel.search(year_not_in: [2000, 2010, 2015])

但我只在year 不是nil 的情况下从MyModel 返回结果。例如,查询命中MyModel.year = 1999,但未命中MyModel.year = nil。我希望nil 不在该数组中,但也许这就是它在 SQL 中的定义方式。

有没有办法我可以覆盖yearyear_not_in ransacker 以添加上述条件?

【问题讨论】:

    标签: sql ruby-on-rails arel ransack


    【解决方案1】:

    我能够在不覆盖的情况下解决这个问题,但我仍然对如何做到这一点感兴趣。像这样加入语句是我的解决方案:

    .search(m: 'or', year_not_in: [2000, 2010, 2015], year_null: true)

    【讨论】:

      【解决方案2】:

      首先:此解决方案使用ransack (2.4.2)rails 6.1.3 进行测试 为此,GEM ransack 给我们的解决方案是添加一个新的谓词:

      如果您想添加自己的自定义 Ransack 谓词

      not_in_or_null

      你可以这样做:

      “config/initializers/ransack.rb”

      你添加这个

      Ransack.configure do |config|
        config.add_predicate 'not_in_or_null', arel_predicate: 'not_in_or_null'
      end
      
      module Arel
        module Predications
          def not_in_or_null(other)
            left = not_in(other)
            right = eq(nil)
            left.or(right)
          end
        end
      end
      

      然后,你现在有了一个新的谓词。

      【讨论】:

        猜你喜欢
        • 2020-03-06
        • 1970-01-01
        • 2021-02-19
        • 2016-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-14
        • 1970-01-01
        相关资源
        最近更新 更多