我有一个看起来像这样的模型
class Profile < ActiveRecord::Base
...
serialize :languages_spoken, Array
...
end
对于应用程序的域,只关注用户是否使用预定义的English, Spanish, German, French or Italian
目前我正在传递一个数组,该数组是从视图中的多选中选择的参数中最终序列化的。但是,我想用他们说的语言搜索用户,在序列化字段中搜索在ActiveRecord中非常笨拙。
我尝试通过联接表为语言创建一个具有多对多关系的不同模型,但我认为这对于这么小的功能来说太过分了。
我也想过使用 Postgres数组,虽然我不想依赖Postgres。
枚举字段会很棒,但它自然只适用于一个值。
这个问题有没有优雅而简单的解决方案?谢谢。
答案 0 :(得分:0)
更新:我的不好,我忘记了问题的关键部分。它必须是一种多对多的关系。与enum
你不能这样做。 Rails将值存储为DB中的整数。所以,它只存储一个值。
如果您愿意添加Postgres依赖项,则可以使用hstore
类型。它也受到Rails 4的支持。
如果您使用的是Rails 4.1或更高版本,则可以使用Active Record enums。
class Profile < ActiveRecord::Base
enum languages_spoken: [:english, :spanish, :german, :french, :italian]
end
profile.english? # => true/false
profile.languages_spoken # => "english"
Profile.english # => Relation for all "english" profiles
Profile.languages_spoken # => { "English" => 0, "Spanish" => 1, "etc" => ... }