Rails after_create不会给出接收器

时间:2015-01-21 12:16:00

标签: ruby-on-rails ruby devise

我已经在Ruby on Rails中启动了一个项目,并使用设计进行用户注册。我很难理解为什么以下不起作用:

# After create hook to send passwrd reset instructions
after_create(&:send_reset_password_instructions)

我想知道这是否是使用设计方法重置密码信息的具体实现问题,或者我做错了什么。可能是后者。

2 个答案:

答案 0 :(得分:3)

您不应该将您的方法作为块proc传递,而应该作为常规参数传递:

after_create :send_reset_password_instructions

答案 1 :(得分:1)

作为马雷克回答的补充信息:

当您对{ |user| user.send_reset_password_instructions }方法after_create阻止时,它会成为Proc的{​​{1}}对象,其中#arity == 1变为&:send_reset_password_instructions 。实际上,arity == -1用于确定如何调用钩子。请参阅:https://github.com/rails/rails/blob/4a68792df7f2cecf9e6d9ddb18dfe761f553eb2a/activesupport/lib/active_support/callbacks.rb#L447

因此,通常,在为回调定义挂钩时,不应使用#arity格式。