Ruby on rails 如何在rails中为多个枚举添加作用域

Ruby on rails 如何在rails中为多个枚举添加作用域,ruby-on-rails,ruby,enums,scope,Ruby On Rails,Ruby,Enums,Scope,我有一个显示对象所有枚举的选择: <%= f.select( :state_user , User.states.keys.map {|state| [state.titleize,state] }) %> 如何创建允许我选择多个状态的范围 例如,我想筛选所有处于非活动状态或挂起状态的用户 谢谢我在这个范围内使用它: scope :state, lambda { |enum_ids| return nil if enum_ids.empty?

我有一个显示对象所有枚举的选择:

<%= f.select( :state_user 
            , User.states.keys.map {|state| [state.titleize,state] }) %>

如何创建允许我选择多个状态的范围

例如,我想筛选所有处于非活动状态或挂起状态的用户


谢谢

我在这个范围内使用它:

 scope :state, lambda { |enum_ids|
  return nil  if enum_ids.empty?
    objArray = []
    enum_ids.each do |key|
      if (User.estados[key])
        objArray << User.estados[key] 
      end
    end
    return nil  if objArray.empty?
    where (["account.state in (?)" ,  objArray])
 }
scope:state,lambda{| enum_id|
如果枚举ID为空,是否返回nil?
objArray=[]
枚举ID。每个do键|
if(User.estados[key])

objArray不确定你是否还在寻找类似的东西,但这是我发现的

解决方案 我能够通过以下方法实现这一点

scope :for_states, -> (*state_names) {
  where(state: states.values_at(*Array(state_names).flatten))
}
*state\u names
参数将允许将任意数量的参数打包到
state\u names
数组中。
数组(state\u names)
确保在传递单个参数时将其视为数组。最后,
展平
允许将单个数组作为参数传递。之后,splat(
*
)将此数组的所有元素作为参数解压缩到
方法的
值\u

您可以按如下方式使用它:

  • User.for_状态:一个_状态
  • User.for_states:state_1,:state_2
  • User.for_states[:state_1,:state_2]
  • 如果你不需要这种方法那么灵活,它可以简化

    未来 根据设计,在Rails5中,这应该更简单,而且您可以简单地完成

    User.where(state: [:state_1, :state_2])