【问题标题】:Rails duplicated the parameters inside the resourceRails 复制了资源中的参数
【发布时间】:2020-05-26 09:44:10
【问题描述】:

我正在使用 Angular 资源,但我不明白为什么 Rails 会复制参数并将其放在资源名称中。我只需要了解为什么会这样。

// post data
{"title":"asdsad"}

// rails parameters 
Parameters: {"title"=>"asdsad", "presentation"=>{"title"=>"asdsad"}}

重复,因为欢迎来到 Stackoverflow,您需要 50 分来获得 cmets,这样就会发生这种情况。真的很抱歉:AngularJS $resource sending out an extra "registration" hash?

【问题讨论】:

    标签: ruby-on-rails angularjs angular-resource


    【解决方案1】:

    ..如果您在初始化程序中打开了 config.wrap_parameters [检查文件 config/initializers/wrap_parameters.rb] 或 [you] 正在调用 wrap_parameters() 在您的控制器中...参数将被克隆并 默认情况下根据控制器的名称包装在密钥中。

    http://guides.rubyonrails.org/action_controller_overview.html#parameters http://api.rubyonrails.org/classes/ActionController/ParamsWrapper.html

    换句话说,您看到的是 rails 在 params 哈希中输入内容的默认方式。

    【讨论】:

    • 非常感谢@7stud 我不知道。
    • 刚遇到同样的问题,在控制器中调用wrap_parameters false 也会停止控制器特定级别的行为
    • @doz87 这正是我想要的。谢谢!
    【解决方案2】:

    我有同样的问题,但我不明白这个问题,需要一个不同的解决方案。

    在我的密码控制器中(通过电子邮件启用密码重置),我的参数如下所示:

    {"email"=>"eg@eg.com", "code"=>"123", "password"=>"[FILTERED]", "password"=>{"email"=>"eg@eg.com", "code"=>"123", "password"=>"[FILTERED]"}}

    我想,“为什么我的参数在 password 内部重复”,没有意识到外部 password 来自资源名称。 (谢谢,7stud!)但是,如果我在控制器顶部添加wrap_parameters false 以使参数变平,那么我就不能使用“要求/允许”模式来处理强参数:

    #passwords_controller.rb
    ...
    private
    def forgot_password_params
        params.require(:password).permit(:email, :password, :code)
    end
    

    为了使这更清晰,我使用wrap_parameters重命名参数中的外部密码参考。代码:

    #passwords_controller.rb
    wrap_parameters "reset" 
    ...
    private
    def forgot_password_params
        params.require(:reset).permit(:email, :password, :code)
    end
    

    以及生成的参数:{"email"=>"eg@eg.com", "code"=>"123", "password"=>"[FILTERED]", "reset"=>{"email"=>"eg@eg.com", "code"=>"123", "password"=>"[FILTERED]"}}

    然后我立即遇到了一个相关问题,在该问题中,我从表单中传入了newPassword,但它不在我的参数中。默认情况下,params 仅包含模型中的属性。 wrap_parameters 让我也解决这个问题:

    #users_controller.rb
    wrap_parameters :user, include: [:username, :email, :password, :newPassword]
    

    【讨论】:

      猜你喜欢
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 2012-04-07
      • 1970-01-01
      • 2014-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多