使用 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
我有一个 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