ruby-on-rails - ActiveRecord 模型构造函数在 Rails 中扮演什么角色(如果有)?

标签 ruby-on-rails activerecord constructor

我刚刚读过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/

相关文章:

ruby-on-rails - Active Record 未定义方法 read_attribute_for_serialization

database - 使用 sqlalchemy 的 'engine_from_config'

c++ - "Ambiguous resolution"选择性构造函数继承错误

javascript - .js.erb 文件中的 Rails 实例变量

ruby-on-rails - 在 json 响应中转换两个模型属性

ruby-on-rails-3 - Michael Hart 教程第 7 章 - UsersController 中的 ActiveRecord::StatementInvalid#new

c++ - 具有在 C++ 中需要参数的构造函数的新对象数组

ruby-on-rails - 将 ActiveRecord 查询作为变量返回,而不是散列?

ruby-on-rails - 如何将零填充为小数结果

ruby-on-rails - after_touch 回调被多次触发