Ruby on rails 如果拼写相同,则会导致错误。为什么?

Ruby on rails 如果拼写相同,则会导致错误。为什么?,ruby-on-rails,ruby,ruby-on-rails-4,ruby-2.1,Ruby On Rails,Ruby,Ruby On Rails 4,Ruby 2.1,我在读,上面写着,电话 something {|i| i.foo } something(&:foo) 它们是等价的 现在,我正试图根据这个模式重构名为AdminUser的模型,并替换它 after_create { |admin| admin.send_reset_password_instructions } 与 ,但当我运行迁移时,其中包含 def migrate(direction) super # Create a default user AdminUser.

我在读,上面写着,电话

something {|i| i.foo }
something(&:foo)
它们是等价的

现在,我正试图根据这个模式重构名为
AdminUser
的模型,并替换它

after_create { |admin| admin.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


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

我知道这是一个老问题,但它让我很感兴趣,促使我自己做一些研究。我没有一个正确的代码答案给你,但环顾四周,我相信这篇文章是非常密切相关的,很可能会回答你的问题“这里出了什么问题?”

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

话虽如此,我相信你有你的理由按照你的方式设置你的代码,但基于你所做的隐含想法和上下文,我同意@photoionized with use
after_create:send_reset_password_instructions
因为它清晰、简洁并且(很可能)符合您的期望结果。

我看不出有任何理由您不能在创建{| admin | admin.send_reset_password_instructions}
之后用较短的形式替换
,因此我会在其他地方寻找问题。您可能会想,“但在我做出更改之前它起作用了”,但我会再次检查您是否没有做出其他更改,可能是无意中。更好的是,为什么不在创建后执行
:发送\u重置\u密码\u说明
ArgumentError: no receiver given