【问题标题】:Strong params require works, but permit doesn't强大的参数需要工作,但许可证不需要
【发布时间】:2015-06-13 06:17:18
【问题描述】:

这是相关的 Rails 代码:

def update
  project_id = update_params[:project]
end

def update_params
  params.require(:project).permit(:technology, :team_member)
end

这是我的 PATCH 请求(Angular + CoffeeScript):

Restangular.all("projects/#{$scope.projectID}")
  .patch(team_member_delete: team_member.id, project: $scope.projectID)

这是服务器看到的内容:

Parameters: {"technology_delete"=>7, "project"=>"64", "id"=>"64"}

这是来自服务器日志的完整错误:

Started PATCH "/projects/64" for ::1 at 2015-06-12 17:23:40 -0400
Processing by ProjectsController#update as HTML
Parameters: {"technology_delete"=>7, "project"=>"64", "id"=>"64"}
Completed 500 Internal Server Error in 1ms (ActiveRecord: 0.0ms)

NoMethodError (undefined method `permit' for "64":String):
  app/controllers/projects_controller.rb:73:in `update_params'
  app/controllers/projects_controller.rb:29:in `update'

“64”:String 的未定义方法 `permit' 部分让我认为它将 64 解释为键,而不是值。

以下是我尝试过的一些事情:

  • 将补丁请求参数格式化为 JSON(无变化)
  • 访问 params["project"] 而不是 params[:project](无变化)
  • 发送 64(一个 int)而不是“64”(一个字符串)(64:Fixnum 的未定义方法 `permit')

我在 rails 4.2.1,所以 strong_params 应该在没有 gem 的情况下预先安装。 这个问题起初看起来很有希望,但服务器日志显示参数是哈希,而不是字符串。 Rails 4 Controller Test "Undefined Method Permit"

【问题讨论】:

  • 您所需的键有一个字符串作为值 - rails 期望它是一个散列(嗯,你真的期待它)。如果不了解模型的更多信息,很难说出应该如何构建参数。

标签: ruby-on-rails angularjs strong-parameters


【解决方案1】:

看来你有两个问题

首先 - 这很奇怪

def update
  project_id = update_params[:project]
end

通常看起来像

def update
  project = Project.find(id)
  project.update_attributes(project_params)
  ...
end

private

def project_params
  params.require(:project).permit(:technology, :team_member)
end

第二个 - 您的表单没有以正确的格式提交项目参数 - 看起来整个项目都丢失了。正如@joseph 所说,它们应该在散列中。如果需要帮助,请添加表单视图代码。

【讨论】:

    【解决方案2】:

    试试

    params.require(:project).permit(:technology, :project, :team_member)
    

    ...

    实际上,看起来您需要像这样传递参数:

    "project"=>{"technology_delete"=>7, "project"=>"64", "id"=>"64"}
    

    第一

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-25
      • 2021-06-21
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多