【问题标题】:Rails: .require() without actually requiring it?Rails: .require() 实际上不需要它?
【发布时间】:2017-07-02 01:14:24
【问题描述】:

我正在尝试使用...

params.require(:subscriber).permit(:utm_source, :utm_medium, :utm_campaign, :utm_term, :utm_content)

问题是在极少数情况下我想做:

Subscriber.new(subscriber_params)

而且我不在乎所有值是否都是空的......当我这样做时,它会引发ActionController::ParameterMissing

所以我需要一种使require()“可选”但仍然使用它来限制嵌套参数和安全性的方法,所以人们不能添加{admin: true}之类的东西......

实际的参数哈希看起来像:

{subscriber: {utm_source: 1, ...}

我无法更改该部分,因为它已在应用程序的许多其他地方使用。就这一个地方。

【问题讨论】:

    标签: ruby-on-rails parameters ruby-on-rails-5 strong-parameters actioncontroller


    【解决方案1】:

    您可以使用fetch 代替require

    params.fetch(:subscriber).permit(:utm_source, :utm_medium, :utm_campaign, :utm_term, :utm_content)
    

    查看rails guides 了解有关强参数的更多信息。

    【讨论】:

    • 谢谢!什么是“标量”?我阅读了这些文档,但有些地方不太明白
    • @Tallboy 标量可以描述为一个包含单个值的变量。例如,数字或字符串都是标量,但数组或散列不是。检查this post以获得更详细的答案。
    • 如果订阅者可能为空,请执行以下操作:params.fetch(:subscriber, {}).permit(...)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 2017-11-11
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多