SimpleEnum::Multiple is extension of SimpleEnum, which brings multi-select enum support to SimpleEnum.
Add this to a model:
classUser < ActiveRecord::Baseas_enum:favorites,[:iphone,:ipad,:macbook],accessor: :join_tableendThen create the required users_favorites table using migrations:
classAddFavoritesColumnToUser < ActiveRecord::Migrationdefchangecreate_join_table:users,:favoritesendendIt will store multi-enums data in a join table, if you don't want a join table, you may use bitwise accessor:
# Migrationadd_column:Users,:favorite_cds,:integer# Modelas_enum:favorites,[:iphone,:ipad,:macbook],accessor: :bitwiseIt will store multi-enums data in a integer column, and if you don't want SimpleEnum::Multiple manage how you store your data, you can use multiple accessor:
# Model# serialize :favorite_cds # serialize :favorite_cds, YourOwnCoder as_enum:favorites,[:iphone,:ipad,:macbook],accessor: :multipleThis accessor will not handle how the data saved in the database, so you have to use something like serialize :favorite_cds, or implement your own Coder.
classUser < ActiveRecord::Baseas_enum:favorites,[:iphone,:ipad,:macbook],accessor: :join_tableendjane=User.newjane.favorites=[:iphone,:ipad]jane.iphone?# => truejane.ipad?# => truejane.macbook?# => falsejane.favorites# => [:iphone, ipad]jane.favorite_cds# => [0, 1]joe=User.newjoe.iphone!# => [:iphone]joe.favorites# => [:iphone]joe.favorite_cds# => [0]User.favorites# => #<SimpleEnum::Enum:0x0....>User.favorites[:iphone]# => [0]User.favorites.values_at(:iphone,:ipad)# => [0, 1]User.iphones# => #<ActiveRecord::Relation:0x0.... [jane, joe]># You can also do this since `favorites` returns a # #<SimpleEnum::Multiple::CollectionProxy> rather than a #<Array>:joe=User.newjoe.iphone!# => [:iphone]joe.favorites.push:ipadjoe.favorites# => [:iphone, ipad]joe.favorite_cds# => [0, 1]The gem is available as open source under the terms of the MIT License.