代码之家  ›  专栏  ›  技术社区  ›  John Topley

ActiveRecord模型构造函数在Rails中扮演什么角色(如果有的话)?

  •  16
  • John Topley  · 技术社区  · 16 年前

    我刚刚在看书 this question 这是关于给ActiveRecord模型的日期字段一个默认值。接受的答案显示如何从控制器内设置默认值。在我看来,这种业务逻辑实际上属于模型本身。

    initialize 方法?我很好奇,因为在我所看到的Rails代码中,我并没有看到ActiveRecord模型的构造函数有多少用途。他们是否可以发挥作用?如果可以,作用是什么?

    3 回复  |  直到 9 年前
        1
  •  23
  •   Topher Fangio    16 年前

    我经常这样做,实际上是为了默认值。它运行良好,仍然允许用户更改它。记住,当您说 MyObject.new . 但是,您可能需要阅读 this blog entry (尽管有点过时)关于使用 initialize .

    你应该使用 after_initialize 而不是 初始化 初始化后 方法是在您的模型中定义的,它作为对new、create、find和生成模型实例的任何其他方法的回调被调用。

    理想情况下,您应该这样定义它:

    def after_initialize
      @attribute ||= default_value
    end
    

    after_initialize :run_some_other_method
    
        2
  •  4
  •   Topher Fangio    11 年前

    @托弗方吉奥的回答是正确的。从他的回答(2009年)到现在(2015年),ActiveRecordAPI似乎发生了一些变化。

    according to the ActiveRecord docs :

    class Widget < ActiveRecord::Base
      after_initialize |new_widget|
        new_widget.name ||= 'Unnamed Widget'
      end
    end
    

    您可以用 puts rails console 它实际上是正确初始化的。

        3
  •  2
  •   JRL    16 年前

    据此, blog ,active record并不总是使用new,因此可能不会对对象调用initialize。