Rails:同时更新ActiveRecord实例的两个字段

时间:2010-10-22 19:06:28

标签: ruby-on-rails activerecord field

我有一个名为Book的模型,其中包含字段titlefilename(以及其他字段,但它们不相关)。我希望filename字段是使用标题自动创建的,因此在我的 Book.rb 中:

class Book < ActiveRecord::Base
  # ...

  def title=(title)
    self.filename = sanitize_filename(title)
    self.title = title
  end

  # ...
end

因为self.title = title它会进行无限递归。我怎么能避免这个?

谢谢!

3 个答案:

答案 0 :(得分:2)

你可以在before_save上写下

def before_save
  self.filename = sanitize_filename(self.title)
end

答案 1 :(得分:1)

试试这种方式

class Book
  def title=(title)
    self.filename = sanitize_filename(title)
    self[:title] = title
  end
end

答案 2 :(得分:1)

ActiveRecord api中有一部分'覆盖默认访问者'。建议的解决方案是:

def title=(t)
  self.filename = sanitize_filename(t)
  write_attribute(:title, t)
end