我刚刚读过this question这是为 ActiveRecord 模型的日期字段提供默认值。接受的答案显示了如何从 Controller 内设置默认值。在我看来,这种业务逻辑确实属于模型本身。
然后我开始思考,如果这是 Java,我可能会在声明实例变量时或在构造函数中设置初始字段值。由于数据库支持的字段不必在 ActiveRecord 模型中显式声明,因此您可以使用模型的 initialize
方法吗?我很好奇,因为我在我看过的 Rails 代码中并没有真正看到 ActiveRecord 模型的构造函数有多少使用。他们是否可以发挥作用?如果有,作用是什么?
最佳答案
实际上,我经常对默认值执行此操作。它运行良好并且仍然允许用户更改它。请记住,当您说出MyObject.new
时,就会调用initialize 方法。但是,您可能想阅读 this blog entry (尽管有点过时)关于使用initialize
。
您应该使用after_initialize
而不是initialize
。 ActiveRecord::Base 需要初始化方法来准备许多方便的方法。如果您的模型中定义了 after_initialize
方法,它将作为 new、create、find 以及生成模型实例的任何其他方法的回调被调用。
理想情况下,您希望像这样定义它:
def after_initialize
@attribute ||= default_value
end
另请注意,您不能像其他回调一样使用此回调,您必须定义一个名为 after_initialize 的方法(如上所示)才能使其工作。您不能执行以下操作:
after_initialize :run_some_other_method
关于ruby-on-rails - ActiveRecord 模型构造函数在 Rails 中扮演什么角色(如果有)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1716601/