覆盖模型属性

mui*_*ine 1 attributes ruby-on-rails-3

这就是事情.我有一个国家模型,有两列"语言"和"default_language".因此,例如,对于瑞士,这些列分别设置为"de,fr,it"和"de".

现在,如果我做Country.languages我得到"de,fr,it"字符串.我怎么能覆盖这个,所以当我得到Country.languages我得到一个数组["de","fr","it"]?

当然我可以创建一个函数def available_languages,但是,我仍然不希望语言公开.

ron*_*chn 5

对于这种情况下的简单数组,最好编写自己的解决方案.

这可以通过覆盖getter/setter方法来完成:

在你的模型中:

class Country < ActiveRecord::Base
  def languages
    read_attribute(:languages).split(',')
  end
  def languages=(array)
    write_attribute(:languages,array.join(','))
  end
end
Run Code Online (Sandbox Code Playgroud)

对于哈希,您可以使用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