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

问题描述 投票:0回答:2

我可以做这个代码:

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

ruby ruby-on-rails-4
2个回答
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)

0
投票

您可以检查是否要退出参数

例如:

if (user_params.has_key?(:name))

end

此外,参数以哈希值保存,因此您可以使用不同的方法来应用逻辑https://ruby-doc.org/core-1.9.3/Hash.html

© www.soinside.com 2019 - 2024. All rights reserved.