Ruby on Rails (4)

听着《Traveling Light 》继续我们的学习。这次我们用命令行执行,打开cmd,改变目录到RuBymineProjects下

 

1.新建rails工程

rails new Demo6 -d=mysql

这句命令意思是新建一个名称为Demo6的rails工程,并且使用mysql数据库。然后你会看到好多create语句和using语句。。。

2.配置devise

修改Gemfile文件(Gemfile文件在Demo6的目录下),添加一句:

gem 'devise'             #devise是一个gem包

3.配置数据库文件

在mysql中新建数据库demo6_development(也可以使用命令 rake db:create 创建数据库),配置config/database.yml文件,添加自己的密码(当然这里也可以不用自动生成的数据库名,重新定义数据库名称也是可以的)。

development:
  adapter: mysql2
  encoding: utf8
  database: Demo6_development
  pool: 5
  username: root
  password: root
  host: localhost

 

4,执行命令bundle install

bundle install

这个命令是安装Gemfile文件中需要的插件(刚加了一个devise插件)。devise是一个开源的工程,主要用于用户的注册、登录、找回密码、session等等。所谓“不要重复制造轮子”,既然有好的工程,我们就拿来用,直接在Gemfile中作为gem包引入,方便之极。

 

5.配置devise,建立devise档案

rails g devise:install

结果是创建了两个文件。

D:\Tools\Ruby\RubymineProjects\Demo6>rails g devise:install
      create  config/initializers/devise.rb
      create  config/locales/devise.en.yml

在这里如果报找不到mysql2.so的错误是因为你的mysqllib.dll的引入路径不对,记得一定要把mysqllib.dll拷贝到ruby的bin路径下。

 

6.使用devise创建user model:

rails g devise User

发生了什么?

a.在app/models文件夹下产生了一个user.rb,也就是创建了一个user model

b.在db/migrate文件夹下产生了一个migrate文件

c.在config/routes.rb文件中添加了一行 devise_for :users

 

7.编辑app/models/user.rb文件

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,     #末尾添加,号
         :confirmable, :lockable                 #添加这一行
end

 

8.编辑db/migrate/20131211xxxxxx_devise_create_users.rb文件

class DeviseCreateUsers < ActiveRecord::Migration
  def change
    create_table(:users) do |t|
      ## Database authenticatable
      t.string :email,              :null => false, :default => ""
      t.string :encrypted_password, :null => false, :default => ""

      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

      ## Rememberable
      t.datetime :remember_created_at

      ## Trackable
      t.integer  :sign_in_count, :default => 0, :null => false
      t.datetime :current_sign_in_at
      t.datetime :last_sign_in_at
      t.string   :current_sign_in_ip
      t.string   :last_sign_in_ip

      #打开下面的注释
      ## Confirmable
       t.string   :confirmation_token
       t.datetime :confirmed_at
       t.datetime :confirmation_sent_at
       t.string   :unconfirmed_email # Only if using reconfirmable

      #打开下面的注释
      ## Lockable
       t.integer  :failed_attempts, :default => 0, :null => false # Only if lock strategy is :failed_attempts
       t.string   :unlock_token # Only if unlock strategy is :email or :both
       t.datetime :locked_at


      t.timestamps
    end

    add_index :users, :email,                :unique => true
    add_index :users, :reset_password_token, :unique => true

    #打开以下注释
    add_index :users, :confirmation_token,   :unique => true
    add_index :users, :unlock_token,         :unique => true
  end
end

其实第7,8步没什么必要,不做也可以,这两个步骤就是在数据库生成表示多生成几个字段,用来记录信息用的。

 

9.生成数据表:

在rubyMine中找到db/migrate/20131211xxxxxx_devise_create_users.rb,右键选在create "db:migrate",点击OK,点击运行(这里上篇文章说过了),这是控制台输出

D:\Tools\Ruby\RailsInstaller\Ruby2.0.0\bin\ruby.exe -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) D:\Tools\Ruby\RubymineProjects\Demo6\bin\rake db:migrate
==  DeviseCreateUsers: migrating ==============================================
-- create_table(:users)
   -> 0.1700s
-- add_index(:users, :email, {:unique=>true})
   -> 0.1530s
-- add_index(:users, :reset_password_token, {:unique=>true})
   -> 0.1290s
-- add_index(:users, :confirmation_token, {:unique=>true})
   -> 0.1410s
-- add_index(:users, :unlock_token, {:unique=>true})
   -> 0.0970s
==  DeviseCreateUsers: migrated (0.6900s) =====================================


Process finished with exit code 0

这一步也可以直接使用命令 rake db:migrate 完成数据库迁移工作。

 

10.配置邮件服务器,编辑config/initializers/devise.rb

# ==> Mailer Configuration
  # Configure the e-mail address which will be shown in Devise::Mailer,
  # note that it will be overwritten if you use your own mailer class
  # with default "from" parameter.
  config.mailer_sender = "[email protected]"   #换成你的邮箱,最好不要是gmail

这步就是设置你的转发邮件的地址,其实所有用户的注册的验证信息都是通过这个邮箱发出去的。记得这个邮箱是和下面的一步相关联的。

 

11.编辑config/environments/development.rb

# Don't care if the mailer can't send
 config.action_mailer.raise_delivery_errors = true #此处改为true
 #添加以下内容
 config.action_mailer.default_url_options = { :host => "localhost:3000" } #刚才devise的提示中提到这一句
 config.action_mailer.delivery_method = :smtp
 config.action_mailer.smtp_settings = {
 :address => "smtp.126.com",
 :port => 25,
 :domain => "126.com",
 :authentication => :login,
 :user_name => "[email protected]", #你的邮箱
 :password => "xxxxxxxxxxx" #你的密码
 }

这里要说一下,现在用的是126的邮箱,所以如果你想用其他的邮箱进行邮件的发送,那么就需要重新配置这些信息了。

12.其它配置

a.新建一个home controller

rails g controller home index

 

生成信息

D:\Tools\Ruby\RubymineProjects\Demo6>rails g controller home index
      create  app/controllers/home_controller.rb
       route  get "home/index"
      invoke  erb
      create    app/views/home
      create    app/views/home/index.html.erb
      invoke  test_unit
      create    test/controllers/home_controller_test.rb
      invoke  helper
      create    app/helpers/home_helper.rb
      invoke    test_unit
      create      test/helpers/home_helper_test.rb
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/home.js.coffee
      invoke    scss
      create      app/assets/stylesheets/home.css.scss

生成home的controller和view就是要你访问home的,我们在访问home的controller前面加了一个过滤器,必须先登录才能访问home,简单的说,现在就是建你的项目了,前面都是为了登录验证的。

 

b.删除public目录下的index.html文件,修改config/routes.rb文件,添加一句

root :to => "home#index"

 

c.编辑app/controllers/home_controller.rb文件

class HomeController < ApplicationController

  before_filter :authenticate_user!  #添加这一句

  def index
  end
end

这是防止非法用户的访问,首先要验证用户的合法性。

 

d.编辑app/views/layouts/application.html.erb文件,提示flash信息

<!DOCTYPE html>
<html>
<head>
  <title>Demo6</title>
  <%= stylesheet_link_tag    "application", media: "all", "data-turbolinks-track" => true %>
  <%= javascript_include_tag "application", "data-turbolinks-track" => true %>
  <%= csrf_meta_tags %>
</head>
<body>

#添加以下两句
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>

<%= yield %>

</body>
</html>

 

13.启动程序,访问http://localhost:3000

 


我没有账户登录怎么办?点击sign_up注册账户



填写email、密码,点击“sign up ”,不出意外的话去注册邮箱收取确认邮件吧!

可是。可是,他就是出意外了,去我的126邮箱看看,把我的邮件当成垃圾邮件了,不给转发


 

 

没法,注册时不行了,那咱就试试修改密码,看会不会发邮件,点击Forgot your password?

 

填上自己的邮箱,就会发现收到邮件了。

 

 

恩,好了,虽说有点遗憾,不过没关系,谁让他把咱当成破坏分子了呢,就到这哈,下个目标:

探索devise的单点登录以及第三方登录功能
使用cancan进行权限的控制,将权限存储在数据库中

 

点击这里下载源码: Demo6源码