使用 Ransack 搜索枚举字段

Searching on an Enum Field with Ransack

我有一个 table、'jobs' 和一个枚举字段 'status'。 status 具有以下枚举集:

enum status: [ :draft, :active, :archived ]

使用搜查,我如何过滤 table 以获取所有活动记录?

您可以像这样在模型中声明自己的掠夺者:

ransacker :status, formatter: proc {|v| statuses[v]} do |parent|
  parent.table[:status]
end

然后您可以使用默认的搜索语法 _eq 来检查相等性,如下所示:

Model.ransack(status_eq: 'active').result

编辑:如果列名没有改变,您可以跳过代码块:

ransacker :status, formatter: proc {|v| statuses[v]}

这是我在枚举和搜查的观点中使用的东西:

<%= f.select :status_eq, Model.statuses.to_a.map { |w| [w[0].humanize, w[1]] },
                         {:include_blank => true} %>

以下适用于所有情况:草稿,'draft',0,模型中的“0”

ransacker :status do |parent|
  parent.table[:status]
end