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)` 是做啥的?

Rails params.require 不显示

如何使用 params.fetch 强参数

Rails 动态 javascript 加载

Rails 3.2,批量分配,动态角色?

Rails 3 的动态路由