ruby-on-rails - 如何修复 Rails 中的“ActionController::ParameterMissing”错误?
问题描述
我正在创建一个测验应用程序,并希望表单将用户的答案发送到控制器,但无法克服此错误。
我读过的大多数答案似乎都指向 .permit 和 .require 方法作为罪魁祸首,所以我已经尝试了它们的所有排列。
我认为的形式:
<%= form_tag("/cardstates/#{@nextcard.id}/update", method: "post") do %>
<%= text_field_tag("answer[first]") %>
<%= submit_tag("Submit Answer") %>
<% end %>
我的控制器:
class CardstatesController < ApplicationController
def update
@nextcard = Cardstate.find(params[:id])
@user = @nextcard.user
if @nextcard.update(cardstate_params)
redirect_to study_path(@user)
end
end
private
def cardstate_params
params.require(:answer).permit(:first)
end
end
参数:
{"utf8"=>"✓", "authenticity_token"=>"xNTQj4C4NkR0KhghqKwia/Kb0K7MI/eOWfQMfpUFXNkpK7QP560SqAKAtOqaqk4kIWAOKAKSewewL1ptGvPS+A==", "answer"=>{"first"=>"222"}, "commit"=>"Submit Answer", "id"=>"68"}
来自 routes.rb 的相关行
post 'cardstates/:id/update', to: 'cardstates#update'
我希望能够调用 answer.first (上面是 222),这样我就可以根据答案执行必要的逻辑。
解决方案
首先转换
post 'cardstates/:id/update', to: 'cardstates#update'
至
put 'cardstates/:id/update', to: 'cardstates#update'
其他
<%= form_tag("/cardstates/#{@nextcard.id}/update", method: "post") do %>
至
<%= form_tag("/cardstates/#{@nextcard.id}/update", method: "put") do %>
在控制器中你可以简单地调用cardstate_params[:answer]
,你会得到 222
推荐阅读
- matlab - 如何编辑或剪切 Y 轴限制?
- c# - 如何以 xamarin 形式将列表保存到 sqlite 数据库中
- sql - 从 SQL Server 检索任何外部表数据时,Postgresql 外部数据包装器引发错误
- photoshop - 用于调整大小的 Photoshop 脚本(输出 = png,最近邻兼容性)?
- python - 使用 Python 和 BeautifulSoup 开始 Web Scraping - 分步教程中的错误
- java - 有没有办法使用“加入”查询从 Firebase 数据库中检索 android 中的数据?
- mongodb - 如何从过去一小时内没有记录的 Mongo 获取所有 ID
- python - 为什么我对两个熊猫系列做**操作时结果不是缺失值?
- python - 如何解决此错误“TypeError:无法连接'str'和'instance'对象”
- javascript - 滑动和关闭上的 Photoswipe 触发事件