Rails动态params.require(...)。permit(...)语法?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails动态params.require(...)。permit(...)语法?相关的知识,希望对你有一定的参考价值。
我可以做这个代码:
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)
但它不起作用。
顺便说一句:使用Rails 5.1
答案
它不起作用,因为permit
不希望散列作为参数,而是参数列表。
在数组中收集您的参数并使用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)
另一答案
您可以检查是否要退出参数
例如:
if (user_params.has_key?(:name))
end
此外,参数以哈希值保存,因此您可以使用不同的方法来应用逻辑https://ruby-doc.org/core-1.9.3/Hash.html
以上是关于Rails动态params.require(...)。permit(...)语法?的主要内容,如果未能解决你的问题,请参考以下文章
在 Rails 4 中,`params.require(:person).permit(:name, :age)` 是做啥的?