缺少ParameterMissing参数或值为空

时间:2015-05-24 22:38:58

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

我有以下情况: 我有一个管理员控制器,用于管理用户(由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会给我一个错误:

enter image description here

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

编辑:

enter image description here

1 个答案:

答案 0 :(得分:1)

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

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

:as告诉form_for使用的密钥名称与您在params.require电话中使用的默认类名称不同。

您还应该移除f.text_field :id - 您不希望有人编辑该内容。

然后,您的permit(...)数据块需要在该表单中包含您希望进行批量分配的其他内容,您很可能需要:permit(:email, :admin)