我可以执行此代码:
params.require(:something).permit(:param_a,:param_b)
而且:
params.require(:something).permit(:param_a,:param_c_attributes:[])
我的问题是我需要根据是否存在某些参数来选择许可参数。所以我试过了:
premit_params = {:param_a,:param_c_attributes:[]}
premit_params = {:param_a,:param_d} if params[:something] && params[:something][:param_d]
params.require(:something).permit(premit_params)
但它不起作用。
BTW:使用Rails 5.1
答案 0 :(得分:1)
它不起作用,因为*
不希望散列作为参数,而是参数列表。
在数组中收集参数并使用splat运算符(premit_params = [:param_a, { :param_c_attributes: [] }]
premit_params = [:param_a, :param_d] if params.dig(:something, :param_d)
params.require(:something).permit(*premit_params)
)将该数组拆分为列表或参数:
{{1}}
答案 1 :(得分:0)
您可以检查您想要退出的参数
例如:
if (user_params.has_key?(:name))
end
此外,参数以哈希值保存,因此您可以使用不同的方法来应用逻辑 https://ruby-doc.org/core-1.9.3/Hash.html