Closed WangZhefeng93 closed 7 years ago
贴代码,我不好编辑
/app/controllers/users_controllers.rb
class UsersController < ApplicationController
before_action :logged_in, only: :update
before_action :correct_user, only: [:update, :destroy]
def new
@user=User.new
end
def create
@user = User.new(user_params)
if @user.save
redirect_to root_url, flash: {success: "新账号注册成功,请登陆"}
else
flash[:warning] = "账号信息填写有误,请重试"
render 'new'
end
end
def edit
@user=User.find_by_id(params[:id])
end
def changepass
@user =User.find_by_id(params[:id])
end
def changefirst
@user = User.find_by_id(params[:id])
@user.update_attribute("first",true)
@user.update_attribute("password",params[:password])
redirect_to root_url
end
def update
@user = User.find_by_id(params[:id])
if @user.update_attributes(user_params)
flash={:info => "更新成功"}
else
flash={:warning => "更新失败"}
end
redirect_to root_path, flash: flash
end
def destroy
@user = User.find_by_id(params[:id])
@user.destroy
redirect_to users_path(new: false), flash: {success: "用户删除"}
end
#----------------------------------- students function--------------------
private
def user_params
params.require(:user).permit(:name, :email, :major, :department, :password,
:password_confirmation)
end
# Confirms a logged-in user.
def logged_in
unless logged_in?
redirect_to root_url, flash: {danger: '请登陆'}
end
end
# Confirms the correct user.
def correct_user
@user = User.find(params[:id])
unless current_user?(@user)
redirect_to root_url, flash: {:warning => '此操作需要管理员身份'}
end
end
# Confirms a logged-in user.
def teacher_logged_in
unless teacher_logged_in?
redirect_to root_url, flash: {danger: '请登陆'}
end
end
end
/app/views/users/changpass.html.erb
<div class="row">
<div class="col-md-4 col-md-offset-4">
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="text-center">请修改邮箱及密码</h3>
</div>
<div class="panel-body">
<%= form_for @user, url: {action: "changefirst"},method: :post, html: {class: 'form-horizontal', role: 'form'} do |f| %>
<%= render 'shared/error_messages', :object => @user %>
<div class="form-group">
<%= f.label "姓名", class: 'col-sm-3 control-label' %>
<div class="col-sm-9">
<div class="input-group">
<div class="input-group-addon"><span class="glyphicon glyphicon-user"></span></div>
<%= f.label "#{@user.name}", class: 'form-control' %>
</div>
</div>
</div>
<div class="form-group">
<%= f.label "用户名", class: 'col-sm-3 control-label' %>
<div class="col-sm-9">
<div class="input-group">
<div class="input-group-addon"><span class="glyphicon glyphicon-envelope"></span></div>
<%= f.email_field :email, class: 'form-control', placeholder: "输入有效的邮箱" %>
</div>
</div>
</div>
<div class="form-group">
<%= f.label "专业", class: 'col-sm-3 control-label' %>
<div class="col-sm-9">
<div class="input-group">
<div class="input-group-addon"><span class="glyphicon glyphicon-home"></span></div>
<%= f.label "#{@user.major}", class: 'form-control' %>
</div>
</div>
</div>
<div class="form-group">
<%= f.label "培养单位", class: 'col-sm-3 control-label' %>
<div class="col-sm-9">
<div class="input-group">
<div class="input-group-addon"><span class="glyphicon glyphicon-home"></span></div>
<%= f.label "#{@user.department}", class: 'form-control' %>
</div>
</div>
</div>
<div class="form-group">
<%= f.label "新密码", class: 'col-sm-3 control-label' %>
<div class="col-sm-9">
<div class="input-group">
<div class="input-group-addon"><span class="glyphicon glyphicon-lock"></span></div>
<%= f.password_field :password, class: 'form-control', placeholder: "输入密码" %>
</div>
</div>
</div>
<div class="form-group">
<%= f.label "确认密码", class: 'col-sm-3 control-label' %>
<div class="col-sm-9">
<div class="input-group">
<div class="input-group-addon"><span class="glyphicon glyphicon-lock"></span></div>
<%= f.password_field :password_confirmation, class: 'form-control', placeholder: "再次输入密码" %>
</div>
</div>
</div>
<%= f.submit '确定', class: "btn btn-primary btn-block" %>
<%= link_to '取消', root_path, :class => "btn btn-default btn-block" %>
<% end %>
</div>
</div>
</div>
</div>
前面标出来文件名和路径
错误呢
这个错误是由于登录的视图form_for有误,你找到那个文件贴上来
/app/views/sessions/new.html.erb
<div class="row">
<div class="col-sm-offset-4 col-sm-4">
<div class="panel panel-success">
<div class="panel-heading">
<h4><span class="glyphicon glyphicon-lock"></span> 登录</h4>
</div>
<div class="panel-body">
<%= form_for(:session, url: sessions_login_path, method: :post, html: {role: 'form'}) do |f| %>
<div class="form-group">
<%= f.label :email, "账号密码登陆" %>
<div class="input-group">
<div class="input-group-addon"><span class="glyphicon glyphicon-envelope"></span></div>
<%= f.email_field :email, class: 'form-control', placeholder: "输入邮箱" %>
</div>
</div>
<div class="form-group">
<div class="input-group">
<div class="input-group-addon"><span class="glyphicon glyphicon-lock"></span></div>
<%= f.password_field :password, class: 'form-control', placeholder: "输入密码" %>
</div>
</div>
<div class="checkbox">
<label><%= f.check_box :remember_me %>记住我</label>
</div>
<%= button_tag(type: "submit", class: "btn btn-success btn-block") do %>
<span class="glyphicon glyphicon-off"></span>登陆
<% end %>
<% end %>
</div>
<div class="panel-footer">
<p>没有账号?
<%= link_to "注册", new_user_path %>
</p>
</div>
</div>
</div>
</div>
登录这块你改啥了,怎么会这样
我只是在登录时执行的sessions_controller中create方法中加入了是否是第一次的登录的判断。如果是第一次登陆,那么要redirect_to到changepass页面,在这个页面修改密码,使表单提交到changfirst方法中,处理这个表单更新数据库。更新完成后redirect_to到主页重新登录啊。结果就是在重新登录的过程中给我提示这个无效哈希的错误啊
能不能先简化一下,不要changepass试试,只加一个视图看看
好的,我先去试一下,谢谢助教
/app/controllers/sessions_controller.rb