我有这行代码,它根据是否有现有用户定义new_params
:
new_params = params[:existing_user] && params[:existing_user] == "1" ?
existing_user_params(nested_donation_params) :
nested_donation_params
很长。有没有这样的方法可以让它更短更干净?
e.exists_and_equals("1")
最佳答案
这里有几件事要记住。首先是您可以直接比较:
params[:existing_user] == "1"
如果这是 nil == "1"
那么它无论如何都会返回 false
。我首选的处理结构是:
case (params[:existing_user])
when "1"
existing_user_params(nested_donation_params)
else
nested_donation_params
end
现在,根据 existing_user_params
的内容,您可能有一种方法可以进一步简化它。例如,如果 existing_user_params
是辅助方法:
def existing_user_params
case (params[:existing_user])
when "1"
fetch_existing_user_params
else
{ }
end
end
然后就可以去掉分支了:
new_params = existing_user_params.merge(nested_donation_params)
关于到 "exists && =="的 Ruby 快捷方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37335627/