如何将两个相同的块组合成一个块?

时间:2015-05-06 04:02:48

标签: ruby

如何在此使用单个块:

devise_parameter_sanitizer.for(:sign_up) do |u|
  u.permit(:full_name, :email, :password, :password_confirmation)
end
devise_parameter_sanitizer.for(:account_update) do |u|
  u.permit(:full_name, :email, :password, :password_confirmation)
end

2 个答案:

答案 0 :(得分:2)

查看for的定义,您可以看到kind参数被用作@blocks哈希的键。也许这表明你不应该试图“结合”这两个陈述。

如果您纯粹想要重复使用块中的代码,请使用Proc。如下所示:

block = Proc.new do |u| 
  u.permit(:full_name, :email, :password, :password_confirmation) 
end

devise_parameter_sanitizer.for(:sign_up, block)
devise_parameter_sanitizer.for(:account_update, block)

答案 1 :(得分:1)

Proc可以帮助您,请尝试以下操作,

devise_parameter_sanitizer.for(:sign_up, &your_method)
devise_parameter_sanitizer.for(:account_update, &your_method)

def your_method
  Proc.new { |u| u.permit(:full_name, :email, :password, :password_confirmation) }
end