我正在阅读this question,其中包含电话
something {|i| i.foo }
something(&:foo)
是等价的。
现在我试图根据这种模式重构我的名为AdminUser
的模型并替换
after_create { |admin| admin.send_reset_password_instructions }
与
after_create(&:send_reset_password_instructions)
,但是当我正在运行包含行
的迁移时def migrate(direction)
super
# Create a default user
AdminUser.create!(email: 'a@b.de', password: 'very_clever', password_confirmation: 'very_clever') if direction == :up
end
它给了我错误
ArgumentError: no receiver given
指向AdminUser.create!...
行。
谁能告诉我这里出了什么问题?
答案 0 :(得分:0)
我知道这是一个较老的问题,但它让我感兴趣,这让我对自己做了一些研究。我没有为您提供更正的代码答案,但在环顾四周时我相信这篇文章what happened when pass a method to iterator method非常密切相关,很可能会回答您的问题"出了什么问题?这里"
基本上是因为您现在正在通过重构代码传递一个proc,它期望一个特定的参数,即您的AdminUser
不再传递它并导致它没有接收器的错误
话虽如此,我确定您有理由按照自己的方式设置代码,但基于您所做的事情的暗示理念以及我同意的内容@photoionized与使用
after_create :send_reset_password_instructions
因为它清晰,简洁且(很可能)有您想要的结果。