首页 > 解决方案 > 如何修复 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),这样我就可以根据答案执行必要的逻辑。

标签: ruby-on-rails

解决方案


首先转换

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


推荐阅读