我希望有一个表单来编辑我的用户模型的一个字段,该字段与脚手架生成的_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 %>
答案 0 :(得分:0)
问题源于我的数据。由于我在开发过程中,我没有完成所需的所有错误检查。指向不存在的记录的空字段或关联会导致错误,其中问题是数据而不是代码本身并不总是显而易见(至少对我而言)。
我使用sql编辑器并确保导致问题的内容未设置为null,并且诸如supervisor_id之类的列指向实际的现有记录,而不是已删除的记录。
我将params.permit(:login,
更改回params.require(:user).permit(:login,
,现在表单按预期保存。
我的下一步是添加输入验证和索引和show方法的一些错误检查。从长远来看,我认为我需要更加熟练地进行测试,因为这可能会显示可能导致这些类型问题的领域。