Rails动态params.require(...)。permit(...)语法?

时间:2017-12-24 11:44:41

标签: ruby ruby-on-rails-4

我可以执行此代码:

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

2 个答案:

答案 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