【发布时间】:2016-05-16 15:41:10
【问题描述】:
我有一个表,'jobs' 带有一个枚举字段'status'。 status 具有以下枚举集:
enum status: [ :draft, :active, :archived ]
使用 ransack,我如何过滤表中的所有活动记录?
【问题讨论】:
-
请发布您到目前为止所尝试的内容。
我有一个表,'jobs' 带有一个枚举字段'status'。 status 具有以下枚举集:
enum status: [ :draft, :active, :archived ]
使用 ransack,我如何过滤表中的所有活动记录?
【问题讨论】:
你可以像这样在模型中声明自己的ransacker:
ransacker :status, formatter: proc {|v| statuses[v]} do |parent|
parent.table[:status]
end
然后您可以使用默认的 ransack 语法 _eq 来检查相等性,如下所示:
Model.ransack(status_eq: 'active').result
编辑:如果列名没有改变,您可以跳过代码块:
ransacker :status, formatter: proc {|v| statuses[v]}
【讨论】:
active 转换为整数.to_i,因此您将始终得到0 而不是正确的值。
这是我在视图中用于枚举和洗劫的东西:
<%= f.select :status_eq, Model.statuses.to_a.map { |w| [w[0].humanize, w[1]] },
{:include_blank => true} %>
【讨论】:
radio_buttons吗?
以下适用于所有情况:draft, 'draft', 0, '0' in model
ransacker :status do |parent|
parent.table[:status]
end
【讨论】: