这是事情。我有一个国家模型,有两列“语言”和“default_language”。因此,例如,对于瑞士,这些列分别设置为“de,fr,it”和“de”。
现在,如果我做Country.languages,我会得到“de,fr,it”字符串。我怎么能覆盖这个,所以当我得到Country.languages我得到一个数组[“de”,“fr”,“it”]?
当然我可以创建一个函数def available_languages,但我仍然不希望语言公开。
答案 0 :(得分:5)
对于这种情况下的简单数组,最好编写自己的解决方案。
这可以通过覆盖getter / setter方法来完成:
在你的模特中:
class Country < ActiveRecord::Base
def languages
read_attribute(:languages).split(',')
end
def languages=(array)
write_attribute(:languages,array.join(','))
end
end
对于哈希,您可以使用ActiveRecord::Store
,请参阅http://api.rubyonrails.org/classes/ActiveRecord/Store.html
对于更一般的对象(不只是数组,您可以使用serialize
),请参阅http://duanesbrain.blogspot.co.nz/2007/04/ruby-on-rails-persist-array-to-database.html