使用Ransack在Enum字段上搜索

Wil*_*ill 6 ruby ransack

我有一张桌子,'工作'有一个enum字段'status'.status具有以下枚举集:

enum status: [ :draft, :active, :archived ]
Run Code Online (Sandbox Code Playgroud)

使用ransack,如何过滤表格,比如所有活动记录?

qar*_*rol 9

您可以在模型中声明自己的ransacker,如下所示:

ransacker :status, formatter: proc {|v| statuses[v]} do |parent|
  parent.table[:status]
end
Run Code Online (Sandbox Code Playgroud)

然后您可以使用默认的ransack语法_eq来检查这样的相等性:

Model.ransack(status_eq: 'active').result
Run Code Online (Sandbox Code Playgroud)

编辑:如果列名未更改,则可以跳过代码块:

ransacker :status, formatter: proc {|v| statuses[v]}
Run Code Online (Sandbox Code Playgroud)


And*_*nic 7

这是我在enums和ransack的视图中使用的东西:

<%= f.select :status_eq, Model.statuses.to_a.map { |w| [w[0].humanize, w[1]] },
                         {:include_blank => true} %>
Run Code Online (Sandbox Code Playgroud)