我有一张桌子,'工作'有一个enum字段'status'.status具有以下枚举集:
enum status: [ :draft, :active, :archived ]
Run Code Online (Sandbox Code Playgroud)
使用ransack,如何过滤表格,比如所有活动记录?
您可以在模型中声明自己的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)
这是我在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)