rails数据交互(3)

假如要向已经有的并且已经进行了数据库迁移的模型中添加字段的话,使用

    rails generate migration add_password_to_users password:string 

并且在user.rb中添加下面这段话

    has_secure_password
    validates :password, length: {minimum: 6}

上面这句话会添加一个有安全认证的密码,并且规定了最短6位
然后需要在执行这个命令:

 rake db:reset
 rake db:migrate

稍微一提健壮参数

 def user_params #params存储了由前端传递过来的参数
    params.require(:user).permit(:userName, :email )
  end

这里规定了强制只允许某几个提交,并将之保存下来返回

在rails前端代码中使用的form_for生成的表单,会自动检查错误,并标红,此时可以使用

    <% if @user.errors.any? %>
        errors has 
        <%= pluralize(@user.errors.count, "errors") %>
        ge
        <% @user.errors.full_messages.each do |mag| %>
            <li><%= mag %></li>
        <% end %>
    <% end %>

来显示错误信息。

以下下为重点:session

    rails generate controller Session new

然后在routes.rb路由文件中添加以下路由

    get 'login' => 'sessions#new'
    post 'login' => 'session#create'
    delete 'logout' => 'session#destroy'

在sessioncontroller中的create方法中先查找是否存在表单提交的用户信息

    def create
        User.find_by(email: params[:session][:password].downcase)
        #使用find_by 对email字段进行查找,并转换成小写
         if @user && @user.thuthenticate(params[:session][:email])
         #thuthenticate是对字段进行匹配
         session[:user_id] = @user.id
         #能够在主动消除session之前一直保存登录信息
         redirect_to @user
       else
         render 'new'
       end
     end

添加登出
在show.html.erb和UsersController.rb

    <%= link_to "log out", logout_path, method: "delete"%>
  def destroy
    session.delete(:user_id)
    render 'new'
  end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值