【问题标题】:ParameterMissing param is missing or the value is emptyParameterMissing 参数丢失或值为空
【发布时间】: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 给我一个错误:

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

编辑:

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 view controller parameter-passing


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 2021-11-20
    • 1970-01-01
    相关资源
    最近更新 更多