ParameterMissing 参数丢失或值为空

Posted

技术标签:

【中文标题】ParameterMissing 参数丢失或值为空【英文标题】:ParameterMissing param is missing or the value is empty 【发布时间】:2015-05-24 22:38:57 【问题描述】:

我有以下情况: 我有一个管理员控制器,用于管理用户(由 Devise 生成的模型)。

所以,我使用另一个控制器的操作来管理资源“用户”。

这是我的文件:

admins_controller.rb

before_action :set_user, only: [:show, :edit, :update, :destroy]

def update
    respond_to do |format|
      if @user.update(user_params)
        format.html  redirect_to admins_index_path, notice: 'Product was successfully updated.' 
        format.json  render :show, status: :ok, location: @user 
      else
        format.html  render :edit 
        format.json  render json: @user.errors, status: :unprocessable_entity 
      end
    end

  end

def set_user
      @user = User.find(params[:id])
  end

  def user_params
    params.require(:user).permit(:id)
  end

edit.html.erb

<h1>Edit user</h1>

<%= form_for @user, :as => :patch, :url => admins_update_path(id: @user) do |f| %>

  <% if @user.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@user.errors.count, "error") %> prohibited this line_item from being saved:</h2>

      <ul>
      <% @user.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
      <%= f.label :id %><br>
    <%= f.text_field :id %>
    </div>
  <div class="field">
      <%= f.label :email %><br>
    <%= f.text_field :email %>
    </div>
  <div class="field">
      <%= f.label :admin %><br>
    <%= f.text_field :admin %>
    </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

问题是当我提交编辑时,rails 给我一个错误:

你能帮帮我吗?我真的不知道如何解决 谢谢

编辑:

【问题讨论】:

【参考方案1】:

更改您的视图以删除 :as 选项,这将修复参数要求错误:

= form_for @user, :url => admins_update_path(id: @user) do |f|

:as 告诉 form_for 使用与您在 params.require 调用中使用的基于默认类名的键名不同的键名。

您还应该删除您的 f.text_field :id - 您不希望有人编辑它。

那么您的permit(...) 块将需要在该表单中包含您希望允许对其进行批量分配的任何其他内容,很可能您会想要:permit(:email, :admin)

【讨论】:

我无法更改我的 form_to 因为 rails 将使用不存在的 UserController。我使用另一个控制器 AdminController 来管理用户。如果我使用 form_for @user 做 |f| rails 会搜索 user_controller。 好的,所以至少去掉:as 选项,它专门告诉form_for 将参数放在与默认基于类名的键不同的键中。 嗨伙计,现在错误消失了,但更新(即使全部通过)不起作用。你有什么主意吗?这里是主帖中的图片 对不起,我真的很累,我没有注意到我的错误。我放了 params.require(:user).permit(:id, :email) 但我通过 :admin 上传。我修复了 params.require(:user).permit(:id, :email,:admin) 并且一切正常。谢谢@smathy。如果你愿意,你能解释一下关于 :as 选项的事实吗?非常感谢你 正如我在原始答案中提到的,我将删除 :id 并添加 :email:name

以上是关于ParameterMissing 参数丢失或值为空的主要内容,如果未能解决你的问题,请参考以下文章

我在尝试显示用户个人资料页面时遇到错误“参数丢失或值为空:user_id”

Shell 字符串操作符实例

如果值为 X 或值为 Y,C# Fluent 验证

ASP .NET MVC Redirecttoaction 将参数传递给 Index 但值为空

在php中提交表单后会话丢失其数据或值

小程序页面跳转传参参数值为url时参数时 会出现丢失