Rails after_create proc 没有给定接收者
Rails after_create proc no receiver given
我在 Rails 的 Ruby 开始了一个项目,并使用 devise 进行用户注册。我很难理解为什么以下内容不起作用:
# After create hook to send passwrd reset instructions
after_create(&:send_reset_password_instructions)
我想知道这是否是重置密码信息的设计方法的特定实施问题,或者我做错了什么。应该是后者。
您不应将您的方法作为块过程传递,而应作为常规参数传递:
after_create :send_reset_password_instructions
作为 Marek 回答的补充信息:
当您将 { |user| user.send_reset_password_instructions }
块提供给 after_create
方法时,它会变成 #arity == 1
的 Proc
对象,而 &:send_reset_password_instructions
会变成 arity == -1
.实际上,#arity
用于确定 hook 的调用方式。参考:https://github.com/rails/rails/blob/4a68792df7f2cecf9e6d9ddb18dfe761f553eb2a/activesupport/lib/active_support/callbacks.rb#L447
所以,一般来说,当你为回调定义钩子时,你不应该使用&:method_name
格式。
我在 Rails 的 Ruby 开始了一个项目,并使用 devise 进行用户注册。我很难理解为什么以下内容不起作用:
# After create hook to send passwrd reset instructions
after_create(&:send_reset_password_instructions)
我想知道这是否是重置密码信息的设计方法的特定实施问题,或者我做错了什么。应该是后者。
您不应将您的方法作为块过程传递,而应作为常规参数传递:
after_create :send_reset_password_instructions
作为 Marek 回答的补充信息:
当您将 { |user| user.send_reset_password_instructions }
块提供给 after_create
方法时,它会变成 #arity == 1
的 Proc
对象,而 &:send_reset_password_instructions
会变成 arity == -1
.实际上,#arity
用于确定 hook 的调用方式。参考:https://github.com/rails/rails/blob/4a68792df7f2cecf9e6d9ddb18dfe761f553eb2a/activesupport/lib/active_support/callbacks.rb#L447
所以,一般来说,当你为回调定义钩子时,你不应该使用&:method_name
格式。