强制参数需要作品,但许可不是

时间:2015-06-12 21:46:59

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

这是相关的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'

部分说,"未定义的方法`许可' for" 64":String"让我认为它将64解释为关键,而不是价值。

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

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

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

2 个答案:

答案 0 :(得分:2)

看起来你有两个问题

首先 - 这很奇怪

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所说,他们应该是哈希。如果您需要帮助,请添加表单视图代码。

答案 1 :(得分:1)

尝试

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

...

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

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

第一

相关问题