Rails 3 - 更新模型实例中存在的每个属性(对每个值进行编码)

时间:2014-10-06 15:13:56

标签: ruby ruby-on-rails-3 encode

我想对模型实例中每个属性的值进行编码。 Rails 3是否支持这样的东西?例如

class Book
  attr_accessor :title, :author, :description
end

默认情况下,title,author和description的属性值编码为UTF-8。相反,我想更新所有属性值并将它们编码为ISO。在某些情况下,模型可能具有50多个属性,并且单独调用每个属性没有意义。最好一次更新所有属性。

这是我尝试做的一些伪代码。在Rails 3中是否可以这样?

Book.find(1).update_all_attributes(&:encode("ISO-8859-1"))

更新我知道上面的代码行会失败。它只是伪代码来帮助传达我想要实现的目标。

1 个答案:

答案 0 :(得分:2)

class Book < ActiveRecord::Base
  before_save :recode_attribs

  private

  def recode_attribs
    attributes.each do |name, value|
      next unless value.respond_to?(:encode)
      attributes[name] = value.encode('ISO-8859-1')
    end
  end
end