如何根据枚举状态查询activerecord?

时间:2017-11-30 13:42:46

标签: ruby-on-rails

我正在尝试根据列状态对模型生产实施搜索/过滤操作。列final ObjectMapper mapper = jacksonBuilder().build(); SimpleModule module = new SimpleModule(); module.addDeserializer(Person.class, new PersonDeserializer()); 是整数类型。为了便于阅读,我在status列上使用了enum数据类型,如下所示。

status

然后我开始研究搜索/过滤功能,根据用户提供的状态获取记录。

productions_controller

class Production < ApplicationRecord    
  enum status:{
    Preproduction:1,
    Postproduction: 2,
    Completed:3
  } 
end

查看

def filter
    if params[:filter]
      @productions = Production.where('productions.status like ?', "%#{params[:filter]}%")
    else
      @productions = Production.all
    end
  end

现在,只有在文本字段中输入<%= form_tag [:filter, :productions], :method => 'get' do %> <p> <%= text_field_tag :filter, params[:filter] %> <%= submit_tag "Filter", :status => nil %> </p> <% end %> 12等整数值时,我才能正确查询记录。当我像我指定的那样输入像3这样的状态时,我没有得到结果。我得到一个空白页面。我怎样才能解决这个问题 ?如何让它成功接受字符串和查询?

1 个答案:

答案 0 :(得分:1)

你可以这样做......

@productions = Production.where('productions.status like ?', "%#{Production.statuses[params[:filter]]}%")

枚举有一个复数类方法,因此生产中的枚举status有一个哈希值 Production.statuses看起来像您的状态哈希,但符号已更改为字符串。