如何在Rails中交付之前从模型中的db更改检索到的记录?

时间:2011-11-13 10:20:08

标签: ruby-on-rails ruby-on-rails-3.1

如何在模型返回之前对模型的所有数据进行一些修改? rails中的回调似乎只涉及数据的创建或更新,而不是retreival。

我敢打赌,这可能是一个我看不到的非常明显的解决方案。

以下是一个例子:

我有一张名为quotes的表格。在Quote模型提供任何数据之前,我想用Sun Tzu替换单词Chinese Dude的所有出现。

3 个答案:

答案 0 :(得分:1)

以不同的方式思考这个问题。

您想要更改quote.text,因此它会返回应用替换的文本的数据库值。

这是代码

def text
  if self[:text]
    self[:text].gsub(/Sun Tzu/, "Chinese Dude")
  end
end

因此,您只会覆盖您需要的内容。

答案 1 :(得分:0)

这是一个可以帮助你的回调:

实例化新对象后会触发 after_initialize

Here's如何使用 after_initialize

答案 2 :(得分:0)

使用after_find。我不相信它的工作方式与其他回调相同,因此您必须手动定义方法而不是after_find :my_method。所以这样做

class Post < ActiveRecord::Base
  def after_find
    # do stuff here
  end
end