我应该使用回调还是应该覆盖属性?

时间:2010-04-10 05:30:28

标签: ruby-on-rails activerecord

更像“铁轨”的是什么?如果我想在设置时修改模型的属性,我应该这样做:

  def url=(url)
    #remove session id
    self[:url] = url.split('?s=')[0]
  end

还是这个?

  before_save do |record|
    #remove session id
    record.url = record.url.split('?s=')[0]
  end

以某种方式做到这一点有什么好处吗?如果是这样,为什么?如果没有,哪一个通常更常见?

1 个答案:

答案 0 :(得分:2)

显然这两者有不同的用例。

如果您需要在保存记录之前访问修改后的属性,则应完成第一个。例如,您想要设置网址并立即根据某些条件检查修改后的值,然后再将其保存到数据库。

如果您只想在保存到数据库之前对属性执行某些操作,那么第二个适合。因此,如果您在设置时刻和保存时刻之间访问它,您将获得未修改的值。