我怎么能干(不要重复)/分解以下代码。我觉得我可以做到但是因为我真的是新手,所以我无法做到。
/app/controllers/application_controller.rb
protected
def configure_permitted_parameters
if params[:controller] == "user"
devise_parameter_sanitizer.for(:sign_up) do |u|
u.permit(:email, :password, :password_confirmation)
end
devise_parameter_sanitizer.for(:account_update) do |u|
u.permit(:email, :password, :password_confirmation)
end
else # for clients access
devise_parameter_sanitizer.for(:sign_up) do |c|
c.permit(:email, :password, :password_confirmation)
end
devise_parameter_sanitizer.for(:account_update) do |c|
c.permit(:email, :password, :password_confirmation)
end
end
end
答案 0 :(得分:4)
好吧,既然:sign_up
案例和:account_update
案例中"user"
和else
的方法完全相同 ,我就没有想法为什么你这样划分它。唯一的区别是你在每种情况下给块变量一个不同的名称,(u
和c
),但这不会改变行为。
因此:
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) do |u|
u.permit(:email, :password, :password_confirmation)
end
devise_parameter_sanitizer.for(:account_update) do |u|
u.permit(:email, :password, :password_confirmation)
end
end
请参阅@ UriAgassi的答案,以进一步简化该方法的定义。
答案 1 :(得分:4)
@DanielKnippers给出了一个很好的答案,但你可以进一步干掉你的代码:
def configure_permitted_parameters
[:sign_up, :account_update].each do |sanitize_me|
devise_parameter_sanitizer.for(sanitize_me) do |u|
u.permit(:email, :password, :password_confirmation)
end
end
end
答案 2 :(得分:1)
我和其他所有人谈论条件(不要看它是什么),所以我提出了这个:
def configure_permitted_parameters
actions = [:sign_up, :account_update]
actions.each{|action| sanitize_devise_param_for(action) }
end
def sanitize_devise_param_for(action, permitted = [:email, :password, :password_confirmation])
devise_parameter_sanitizer.for(action) do |c|
c.permit(permitted)
end
end
主要是将事情分解为自己的方法。我发现编写DRY代码更容易,更自然,在我做好单一职责时做得很好。