Ruby on rails 日期范围的自定义ActiveAdmin筛选器-方法中的复杂逻辑

Ruby on rails 日期范围的自定义ActiveAdmin筛选器-方法中的复杂逻辑,ruby-on-rails,activeadmin,ransack,Ruby On Rails,Activeadmin,Ransack,我正在尝试创建一个自定义ActiveAdmin筛选器,该筛选器将日期范围作为参数。我找到的每个解决方案都是针对过于简单的模型方法 是否有办法将这两个参数都传递到model ransacker方法中,和/或至少控制这些参数的传递顺序,并知道传递的是哪一个?(结束日期与开始日期——开始日期是先传递的,而我可能能够解决这个问题,因为结束日期是先发送的)。任何不会破坏应用程序中所有其他过滤器的替代解决方案(即,覆盖activeadmin过滤器以使用作用域-这是应用程序中数百个过滤器中的一个)也欢迎使用

我正在尝试创建一个自定义ActiveAdmin筛选器,该筛选器将日期范围作为参数。我找到的每个解决方案都是针对过于简单的模型方法

是否有办法将这两个参数都传递到model ransacker方法中,和/或至少控制这些参数的传递顺序,并知道传递的是哪一个?(结束日期与开始日期——开始日期是先传递的,而我可能能够解决这个问题,因为结束日期是先发送的)。任何不会破坏应用程序中所有其他过滤器的替代解决方案(即,覆盖activeadmin过滤器以使用作用域-这是应用程序中数百个过滤器中的一个)也欢迎使用

谢谢大家!

admin/model.rb

filter :model_method_in, as: :date_range
models/model.rb

ransacker :model_method, :formatter => proc { |start_date, end_date|
    Model.complicated_method(start_date, end_date)
} do |parent|
   parent.table[:id]
end

...
def method_for_base_queries(end_date)
   Model.long_complicated_sql_call_using_end_date
end

def complicated_method(start_date, end_date)
    model_instances = method_for_base_queries(end_date)
    model_instances.logic_too_complex_for_sql_using_start_date
end

类似的问题,但过滤器/模型逻辑对于不需要同时传入两个参数的替代解决方案来说足够简单:

这可能会有所帮助。给定你的索引过滤器

filter :model_method, as: :date_range
您可以在模型中编写以下内容:

  scope :model_method_gteq_datetime, -> (start_date) {
    self.where('users.your_date_column >= ?', start_date)
  }
  scope :model_method_lteq_datetime, -> (end_date) {
    # added one day since apparently the '=' is not being counted in the query,
    # otherwise it will return 0 results for a query on the same day (as "greater than")
    self.where('users.your_date_column <= ?', (Time.parse(end_date) + 1.day).to_date.to_s)
  }

  def self.ransackable_scopes(auth_object = nil)
    [model_method_gteq_datetime, :model_method_lteq_datetime]
  end
范围:模型方法日期时间,->(开始日期){
self.where('users.your_date_column>=?',start_date)
}
范围:型号方法日期时间,->(结束日期){
#添加了一天,因为查询中没有计算“=”,
#否则,对于同一天的查询,它将返回0个结果(作为“大于”)

self.where('users.your_date_列)我有相同的问题,无法解决。我无法找到任何方法同时获取两个参数。