预期相同的拼写会导致错误。为什么呢?

时间:2016-05-13 18:07:04

标签: ruby-on-rails ruby ruby-on-rails-4 ruby-2.1

我正在阅读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!...行。

谁能告诉我这里出了什么问题?

1 个答案:

答案 0 :(得分:0)

我知道这是一个较老的问题,但它让我感兴趣,这让我对自己做了一些研究。我没有为您提供更正的代码答案,但在环顾四周时我相信这篇文章what happened when pass a method to iterator method非常密切相关,很可能会回答您的问题"出了什么问题?这里"

基本上是因为您现在正在通过重构代码传递一个proc,它期望一个特定的参数,即您的AdminUser不再传递它并导致它没有接收器的错误

话虽如此,我确定您有理由按照自己的方式设置代码,但基于您所做的事情的暗示理念以及我同意的内容@photoionized与使用 after_create :send_reset_password_instructions因为它清晰,简洁且(很可能)有您想要的结果。