【问题标题】:Filterrific, scope without argument and check boxes过滤器、无参数范围和复选框
【发布时间】:2015-07-13 15:40:47
【问题描述】:

我开始使用 filterrific,发现它非常适合与 draper 装饰器等集成。

但是我想发出一个没有参数的范围的简单请求。

想象一个像scope :unassigned, -> { where(support_user: nil)} 这样的模型范围。然后你可以做Ticket.unassigned 来执行查询。

如何将此无参数范围与过滤器集成?例如,带有“未分配”复选框。

编辑: 表格代码:

<%= form_for_filterrific @filterrific do |f| %>
<%= f.hidden_field( :at_and_under_node_id,class: 'filterrific-periodically-observed') %>
<%= f.label "unassigned" %>
<%= f.check_box :unassigned, class: 'filterrific-periodically-observed' %>
<%= link_to('Reset filters',reset_filterrific_url) %>
 </div>
 <%# add an automated spinner to your form when the list is refreshed %>
 <%= render_filterrific_spinner %>
<% end %>

更新: 我们错过的另一个功能是使用枚举进行过滤。如果我有

class Ticket < ActiveRecord::Base

 enum status: [:wait, :closed, :deleted]
 ...
end

又想做一个调用Ticket.wait的过滤器,怎么可能?

谢谢!

【问题讨论】:

标签: ruby-on-rails filterrific


【解决方案1】:

使用这样的复选框:

<%= f.check_box "unassigned", class: 'filterrific-periodically-observed' %>

确保unassigned 范围存在并添加到模型中的filterrific 指令中。

然后将参数传递给您的作用域并检查值:

scope :unassigned, ->(yes_or_no) {
  return nil  if '0' == yes_or_no
  where(support_user: nil)
}

【讨论】:

  • 是的,我现在很喜欢。但是让我很恼火的是不能使用没有参数的范围
  • 无论如何,我想在我的模型中使用枚举进行过滤。我已经更新了我的问题以说明我想要什么。 filterrific 似乎是不可能的
【解决方案2】:

我已经对 filterrific 进行了调整,使其能够承受 arity 0 和枚举请求的范围。由于 arity 没有正确显示必要参数的数量,我使用 ArgumentError 异常。 你好!我对fiterrific有同样的期望。我做了一个叉子。由于范围和枚举的数量不能按预期工作,我使用 ArgumentError 异常。

filterrific_available_filters.each do |filter_name|
    filter_param = filterrific_param_set.send(filter_name)
      next if filter_param.blank? # skip blank filter_params
      begin
        ar_rel = ar_rel.send(filter_name, filter_param)
      rescue ArgumentError #if we have a scope with arity 0 or enum query, we can perform the request without the parameter
        ar_rel = ar_rel.send(filter_name) if (filter_param == 1)
      end
    end
    ar_rel
end

这里有叉子: https://github.com/hachpai/filterrific

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 2019-09-08
    • 2015-07-17
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多