在传入参数的ActiveAdmin中按模型方法过滤

Vin*_*ent 11 ruby ruby-on-rails activeadmin

使用Rails 4.2.1和Active Admin 1.0.0.pre2

我有一个有很多Occupancies的公寓模型.我希望管理员能够看到索引中的公寓是否与作为参数传递的日期重叠.我在Apartment上有一个方法

 def available_during(start_date, end_date)
   return !self.occupancies.any? { |occ| occ.date_range_overlap(Date.parse(start_date), Date.parse(end_date)) }
 end
Run Code Online (Sandbox Code Playgroud)

如果公寓的任何占用与两个给定日期重叠,则返回true.该方法date_range_overlap在占用相当自我解释.我似乎无法弄清楚如何使ActiveAdmin的DSL通过该方法进行过滤,甚至可以使表格输入随机参数.

我能够在索引中放置一个显示available_during方法的布尔返回值的列.

if params[:from] && params[:until]
  column "available?" do |apt|
    apt.available_during(params[:from], params[:until])
  end
end
Run Code Online (Sandbox Code Playgroud)

但我似乎只能通过手动输入url中的from和until params来使其工作.

我如何设置任意搜索表单以将用户发送到正确的参数?或者更好的是,在使用该方法的侧边栏中创建一个过滤器?

Cod*_*son 2

看起来 ActiveAdmin 有一个内置方法可以在视图中创建日期选择器。这些文档可以在这里找到。该示例显示它与一些随机参数一起使用,您将需要根据您的用例修改这些参数。

form do |f|
  f.input :from, as: :datepicker,
    datepicker_options: {
    min_date: "2013-10-8",
    max_date: "+3D"
  }

  f.input :until, as: :datepicker,
    datepicker_options: {
    min_date: 3.days.ago.to_date,
    max_date: "+1W +5D"
   }
end
Run Code Online (Sandbox Code Playgroud)