我有一个尽可能简单的Ruby on rails类:

class ProductProperty < ApplicationRecord
  def initialize
    puts 'hello world'
  end
end

但是,当我简单地try 实例化它时,我得到一个ArgumentError:

[1] pry(main)> ProductProperty.new
ArgumentError: wrong number of arguments (given 1, expected 0)

我不清楚为什么它认为我在("given 1")中传递参数.为了能够编写不带参数的initialize方法,我还需要做一些其他的事情吗?

推荐答案

正如所建议的,您可能不应该在Rails模型中定义您自己的initialize方法.

如果你想做一些事情before, duringafter,你可以用callbacks创建/初始化一个对象

例如:

class ProductProperty < ApplicationRecord
  after_create :do_something_special

  def do_something_special
    puts "I'm doing something"
  end
end
ProductProperty.create #=> "I'm doing something"

有更多的回调可用,因此您可以在对象的生命周期中调用特定的方法.

如果要持久保存和更改数据库中的数据,则可能还需要签出active record migrations

Ruby-on-rails相关问答推荐

Rails 7通过引擎将方法自动加载到控制器中的方法

在Ruby on rails中,重复访问ActiveRecordModel返回相同的对象:预期行为还是错误?

Rails文档的悲观锁定示例中的争用条件

使用嵌套属性时如何自动将父 ID 分配为外键?

为什么是 json.partial!使用新的哈希语法传递本地时,jbuiler 模板中的行不执行?

微软安全链接在页面加载前解锁用户

Ruby的自动代码质量工具?

如何在 to_json 中获取回形针图像的 url

Rails Scope 返回 all 而不是 nil

如何判断是否已经在 ruby​​ on rails 的数据库事务中?

跳过模型中的某些验证方法

使用 javascript 提交 Rails 远程表单

如何将 yaml 文件解析为 ruby​​ 哈希和/或数组?

使用回形针调整图像大小

是否有与 PHP 的 isset() 等效的 Rails?

如何在特定时区(最好是我的应用程序的默认时区,而不是 UTC)中创建新的 DateTime 对象?

Rails 3.1 Sprockets 需要指令 - 有没有办法排除特定文件?

ruby 方法名称中的变量

Ruby on Rails:如何在 select_tag 中使用默认占位符?

.erb 、 .rhtml 和 .html.erb 有什么区别?