强参数需要工作,但许可不需要
Strong params require works, but permit doesn't
这是相关的 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'
"undefined method `permit' for "64":String" 的部分让我认为它将 64 解释为键,而不是值。
以下是我尝试过的一些方法:
- 将补丁请求参数格式化为 JSON(无变化)
- 访问参数["project"]而不是参数[:project](无变化)
- 发送 64(整数)而不是“64”(字符串)(64:Fixnum 的未定义方法“允许”)
我使用的是 rails 4.2.1,因此 strong_params 应该预装时没有 gem。
起初,这个问题看起来很有希望,但服务器日志显示参数是哈希值,而不是字符串。 Rails 4 Controller Test "Undefined Method Permit"
尝试
params.require(:project).permit(:technology, :project, :team_member)
...
实际上,看起来你需要像这样传递参数:
"project"=>{"technology_delete"=>7, "project"=>"64", "id"=>"64"}
第一
看来你有两个问题
首先 - 这很奇怪
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 所说,它们应该在哈希中。如果您需要帮助,请添加表单视图代码。
这是相关的 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'
"undefined method `permit' for "64":String" 的部分让我认为它将 64 解释为键,而不是值。
以下是我尝试过的一些方法:
- 将补丁请求参数格式化为 JSON(无变化)
- 访问参数["project"]而不是参数[:project](无变化)
- 发送 64(整数)而不是“64”(字符串)(64:Fixnum 的未定义方法“允许”)
我使用的是 rails 4.2.1,因此 strong_params 应该预装时没有 gem。 起初,这个问题看起来很有希望,但服务器日志显示参数是哈希值,而不是字符串。 Rails 4 Controller Test "Undefined Method Permit"
尝试
params.require(:project).permit(:technology, :project, :team_member)
...
实际上,看起来你需要像这样传递参数:
"project"=>{"technology_delete"=>7, "project"=>"64", "id"=>"64"}
第一
看来你有两个问题
首先 - 这很奇怪
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 所说,它们应该在哈希中。如果您需要帮助,请添加表单视图代码。