Ces*_*sar 4 ruby enums scope ruby-on-rails
我有一个选择,显示一个对象的所有枚举:
<%= f.select( :state_user
, User.states.keys.map {|state| [state.titleize,state] }) %>
Run Code Online (Sandbox Code Playgroud)
如何创建允许我选择多个状态的范围?
例如,我想过滤所有非活动或暂停的用户.
谢谢
不确定你是否还在寻找这样的东西,但这就是我找到的东西.
我能够使用以下方法实现这一点
scope :for_states, -> (*state_names) {
where(state: states.values_at(*Array(state_names).flatten))
}
Run Code Online (Sandbox Code Playgroud)
该*state_names参数将允许将任意数量的参数打包到state_names数组中.Array(state_names)确保如果传递一个参数,它将被视为一个数组.最后,flatten允许将单个数组作为参数传递.毕竟,splat(*)将此数组的所有元素解包为values_at方法的参数.
您可以按如下方式使用:
User.for_states :one_stateUser.for_states :state_1, :state_2User.for_states [:state_1, :state_2]如果您不需要方法灵活,可以简化.
根据Edge Rails文档,这在Rails 5中应该更简单,你只需要做到
User.where(state: [:state_1, :state_2])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
888 次 |
| 最近记录: |