我是铁杆上的红宝石新手。
我有两种类型的用户管理员和用户。管理员可以创建编辑和销毁用户。我没有创建和销毁的问题,并且很容易实现。
我在控制器中使用了以下代码,
private
def allowed_params
params.require(:user).permit(:role_id, :email, :password, :password_confirmation, :fname, :lname)
end
定义创建用户时所需和允许的参数。
用户创建
def save_user
@user = User.new(allowed_params)
if @user.save
redirect_to list_users_path
else
render 'add_user'
end
end
用户更新
def update_user
@user = User.find(params[:id])
if @user.update_attributes(allowed_params)
redirect_to list_users_path
else
render 'edit_user'
end
end
视图
<div class="container">
<div class="row">
<div class="col-md-12">
<%= link_to "Admin Dashboard", admin_dashboard_path, :class=>'pull-left' %>
<%= form_for @user, :url => update_user_path do |f| %>
<div class="row">
<div class="col-md-12 field">
<div class="col-md-3">
<h2 style="text-align: center;">Edit User Details</h2>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 field">
<div class="col-md-3">
<%= f.label :fname, 'First Name' %><br />
<%= f.text_field :fname, :class => 'form-control' %>
<p class="error"><%= show_errors(@user, :fname) %></p>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 field">
<div class="col-md-3">
<%= f.label :lname, 'Last Name' %><br />
<%= f.text_field :lname, :class => 'form-control' %>
<p class="error"><%= show_errors(@user, :lname) %></p>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 field">
<div class="col-md-3">
<%= f.label :email, 'Email' %><br />
<%= f.text_field :email, :class => 'form-control' %>
<p class="error"><%= show_errors(@user, :email) %></p>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 field">
<div class="col-md-3" style="text-align: center">
<%= f.submit "Update User", :class => 'btn btn-sm btn-primary' %>
</div>
</div>
</div>
<% end %>
</div>
</div>
</div>
当我只传递fname,lname和email时没有发生任何事情。我需要更新用户详细信息,我该怎么办?
任何建议表示赞赏。
有一种调试方式。
tail -f log/development.log
检查终端中development.log文件的更改。A. which Controller and action handled the request
B. The parameters of this request.
C. The log of SQLs excuted by DB
D. The response status
检查是否正确的控制器?或正确的参数?或者SQL已经被执行了?另外,我们在调试时习惯了@user.update_attributes!(allowed_params)
。当某些东西违反了模型(用户)中定义的规则时,需要更多的信息。