代码之家  ›  专栏  ›  技术社区  ›  ryeguy

我应该使用回调还是重写属性?

  •  0
  • ryeguy  · 技术社区  · 14 年前

    更像“铁轨”的是什么?如果要在设置模型属性时对其进行修改,应执行以下操作:

      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 回复  |  直到 14 年前
        1
  •  2
  •   alex.zherdev    14 年前

    显然,这两个有不同的用例。

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

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