无法获取要保存的自定义编辑表单

时间:2016-06-02 18:31:49

标签: ruby-on-rails ruby

我希望有一个表单来编辑我的用户模型的一个字段,该字段与脚手架生成的_form.erb是分开的。

表格会显示但不会保存。当我使用respond_to块修改控制器中的def时,表格被绕过,我只是显示了记录。

employee_supervisor_edit.html.erb有<%= render 'employee_supervisor_form' %>

routes.rb包含match '/employee_supervisor_edit/:id' => 'users#employee_supervisor_edit' , via: [:get, :post ]

表单是_employee_supervisor_form.erb

users_controller.rb有

  def employee_supervisor_edit
    @users = User.all

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

    respond_to do |format|
      if @user.update(user_params)
        format.html { redirect_to @user, notice: 'User 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 user_params
 #  params.require(:user).permit(:login,
                           params.permit(:login,
                           :group_strings,
                           :name,
                           :ou_strings,
                           :email,
                           :active_employee,
                           :last_name,
                           :first_name,
                           :is_supervisor,
                           :@supervisor_id)
end

如果我注释掉整个respond_to块,则会显示该表单,但不会保存任何数据。如果我将respond_to块放入,则表格被绕过并直接进入show方法。

如果我使用params.require(:user).permit(:login,代替params.permit(:login,

,我不确定问题是否与获取以下错误有关
ActionController::ParameterMissing in UsersController#employee_supervisor_edit
param is missing or the value is empty: user

Rails.root: C:/Users/cmendla/RubymineProjects/employee_observations

Application Trace | Framework Trace | Full Trace
app/controllers/users_controller.rb:134:in `user_params'
app/controllers/users_controller.rb:16:in `block in employee_supervisor_edit'
app/controllers/users_controller.rb:15:in `employee_supervisor_edit'

==========添加==============

我的user.rb

中有以下关联
Class User < ActiveRecord::Base
  has_many :subordinates, class_name: "User", foreign_key: "supervisor_id"
  belongs_to :supervisor, class_name: "User"

========添加:=====================

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

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


   User Login:  <%= @user.login %><br>
   User Name:   <%= @user.name %> <br>

    <div class="field">
      <%= f.label :active_employee %>
          <%= f.check_box :active_employee  %>
    </div>

  <div class="field">
    <%= f.label :supervisor %>
    <%= f.collection_select(:supervisor_id, User.order('name'), :id, :name, prompt: true)%>

  </div>


  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

1 个答案:

答案 0 :(得分:0)

问题源于我的数据。由于我在开发过程中,我没有完成所需的所有错误检查。指向不存在的记录的空字段或关联会导致错误,其中问题是数据而不是代码本身并不总是显而易见(至少对我而言)。

我使用sql编辑器并确保导致问题的内容未设置为null,并且诸如supervisor_id之类的列指向实际的现有记录,而不是已删除的记录。

我将params.permit(:login,更改回params.require(:user).permit(:login,,现在表单按预期保存。

我的下一步是添加输入验证和索引和show方法的一些错误检查。从长远来看,我认为我需要更加熟练地进行测试,因为这可能会显示可能导致这些类型问题的领域。