Ruby on Rails Tutorial读书笔记-1

简介: 只是怕忘了命令,全部撸一次,记个大概。。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~   安装Ruby之前,先要安装RVM:   curl -L https://get.rvm.

 

只是怕忘了命令,全部撸一次,记个大概。。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

安装Ruby之前,先要安装RVM:

 

curl -L https://get.rvm.io | bash –s

 

然后,安装一些依赖之后:

 

rvm install ruby version --with-openssl-dir=$HOME/.rvm/usr

 

之后安装Rails:

 

gem install rails --version 4.0.0 --no-ri --no-rdoc

 

创建Rails新程序:

 

rails new first_app

 

启动Rails测试服务器:

 

rails server –b 0.0.0.0

 

Rails产生静态资源文件:

 

rails generate controller StaticPages home help --no-test-framework

 

手动创造Rails之后,默认路由不是以资源方式定义的:

 

SampleApp: :Application. routes. draw do

root to: 'static_pages#home'

resources :users

resources :sessions, only: [:new, :create, :destroy]

match '/signup', to: 'users#new', via: 'get'

match '/help' , to: 'static_pages#help' , via: 'get'

end

 

新建的控制器内容都是空的:

 

class StaticPagesController < ApplicationController
def home
end
def help
end
end

 

其生成的视图也只是一个提示性的HTML:

 

<h1>StaticPages#home</h1>
<p>Find me in app/views/static_pages/home.html.erb</p>

 

Rails提供了特别的布局文件application.html.erb,可以提供网页相同的结构:

 

<!DOCTYPE html>
<html>
<head>
<title>Ruby on Rails Tutorial Sample App | <%= yield( :title) %></title>
<%= stylesheet_link_tag "application" , media: "all" ,
"data-turbolinks-track" => true %>
<%= javascript_include_tag "application" , "data-turbolinks-track" => true %>
<%= render 'layouts/shim’>

</head>


<body>
<%= render 'layouts/header' %>
<div class="container">
<% flash. each do | key, value| %>
<div class="alert alert-<%= key %>"><%= value %></div>
<% end %>
<%= yield %>
<%= render 'layouts/footer' %>
<%= debug( params) if Rails. env. development? %>
</div></body>
</html>

 

Rails除了提供内置方法供我们在视图中使用,我们还可以自建帮助方法,在视图中使用。

 

app/helper/static_pages_helper.rb

app/helper/application_helper.rb

 

Rails中创建LINK的链接及图片:

 

<%= link_to "Sign in" , '#' %> 第一个是链接文本,第二个是链接地址

<%= link_to "About" , about_path %>

<%= link_to image_tag( "rails.png" , alt: "Rails" ), 'http://rubyonrails.org/' %>

 

asset pipeline的目录及自定义样式文件:

 

app/assets/stylesheets

app/assets/stylesheets/custom.css.scss

 

静态资源目录:

 

• app/assets
• lib/assets
• vendor/assets

 

局部视图:

 

<%= render 'layouts/shim' %>

app/views/layouts/_shim.html.erb

 

生成用户模型:

 

rails generate model User name:string email:string

 

进行数据迁移:

 

bundle exec rake db:migrate

 

入库前进行数据有效性验证(电邮不重复,密码加密码,长度不小于3,用户名不超过50)

 

class User < ActiveRecord::Base

  before_save {self.email = email.downcase }

  validates :name, presence: true, length: {maximum: 50 }

  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

  validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false }

  has_secure_password

  validates :password, length: { minimum: 3 }

end

 

确保电邮唯一性的方法:

 

生成索引:

rails generate migration add_index_to_users_email

修改迁移文件:

class AddIndexToUsersEmail < ActiveRecord: :Migration
def change
add_index :users, :email, unique: true
end
end

 

安全密码实现过程:

GEM需求

gem 'bcrypt-ruby' , '3.0.1'

bundle install.

数据库增加新列:

rails generate migration add_password_digest_to_users password_digest:string

bundle exec rake db:migrate

 

用户注册表单:

 

<%= form_for(@user) do |f| %>

      <%= render 'shared/error_messages' %>

      <%= f.label :姓名  %>

      <%= f.text_field :name  %>

 

      <%= f.label :邮箱  %>

      <%= f.text_field :email  %>

 

      <%= f.label :password  %>

      <%= f.password_field :password  %>

 

      <%= f.label :password_confirmation, "Confirmation"  %>

      <%= f.password_field :password_confirmation  %>

 

      <%= f.submit "Create my account", class: "btn btn-large btn-primary"  %>

      <% end %>

 

资源模型的控制器标准操作:

 

class UsersController < ApplicationController

  def show

    @user = User.find(params[:id])

  end

  def new

    @user = User.new

  end

  def create

    @user = User.new(user_params)

    if @user.save

      flash[:success] = "Welcome to the Sample App!"

      redirect_to @user

    else

      render 'new'

    end

  end

  private

 

    def user_params

      params.require(:user).permit(:name, :email, :password, :password_confirmation)

    end

end

 

自定义出错信息,放在app/views/shared/_error_messages.html.erb

 

<% if @user. errors. any? %>
<div id="error_explanation">
<div class="alert alert-error">
The form contains <%= pluralize( @user. errors. count, "error" ) %>.
</div>
<ul>
<% @user. errors. full_messages. each do | msg| %>
<li>* <%= msg %></li>
<% end %>
</ul>
</div>
<% end %>

 

生成session控制器语法

 

rails generate controller Sessions --no-test-framework

 

登陆时的FORM

 

<%= form_for( :session, url: sessions_path) do | f| %>
<%= f. label :email %>
<%= f. text_field :email %>
<%= f. label :password %>
<%= f. password_field :password %>
<%= f. submit "Sign in" , class: "btn btn-large btn-primary" %>
<% end %>

 

用户包含sessionHelper(正常时只能VIEW用,而CONTROLLER用要明文INCLUE)

 

class ApplicationController < ActionController::Base

  # Prevent CSRF attacks by raising an exception.

  # For APIs, you may want to use :null_session instead.

  protect_from_forgery with: :exception

  include SessionsHelper

end

 

为表增加新字段,且为此字段增加索引:

 

rails generate migration add_remember_token_to_users

db/migrate/[timestamp]_add_remember_token_to_users.rb

class AddRememberTokenToUsers < ActiveRecord: :Migration
def change
add_column :users, :remember_token, :string(要自己加哟)
add_index :users, :remember_token(要自己加哟)
end
end

 

 

 

生成token的回调函数:

 

class User < ActiveRecord: :Base
before_save { self. email = email. downcase }
before_create :create_remember_token
.
def User. new_remember_token
SecureRandom. urlsafe_base64
end
def User. encrypt( token)
282
Digest: :SHA1. hexdigest( token. to_s)
end
private
def create_remember_token
self. remember_token = User. encrypt( User. new_remember_token)
end
end

 

 

<header class="navbar navbar-fixed-top navbar-inverse">

  <div class="navbar-inner">

    <div class="container">

        <%= link_to "Autop", '#', id: "logo" %>

        <nav>

          <ul class="nav pull-right">

            <li><%= link_to "Home", root_path %></li>

            <li><%= link_to "Help", help_path %></li>

            <% if signed_in? %>

              <li><%= link_to "Users", '#' %></li>

              //<li id="fat-menu" class="dropdown">

                //<a href="#" class="dropdown-toggle" data-toggle="dropdown">

                  Accout <b class="caret"></b>

                </a>

                //<ul class="dropdown-menu">

                  <li><%= link_to "Profile", current_user  %></li>

                  <li><%= link_to "Settings", '#'  %></li>

                  <li class="divider"> </li>

                  <li>

                        <%= link_to "Sign out", signout_path, method: "delete"  %>

                  </li>

                //</ul>

              //</li>

            <% else %>

            <li><%= link_to "Sign in", signin_path %></li>

            <%  end  %>

          </ul>

        </nav>

    </div>

  </div>

</header>

 

目录
相关文章
|
4月前
|
前端开发 测试技术 数据库
使用Ruby on Rails进行快速Web开发的技术探索
【8月更文挑战第12天】Ruby on Rails以其高效、灵活和易于维护的特点,成为了快速Web开发领域的佼佼者。通过遵循Rails的约定和最佳实践,开发者可以更加专注于业务逻辑的实现,快速构建出高质量的Web应用。当然,正如任何技术框架一样,Rails也有其适用场景和局限性,开发者需要根据项目需求和个人偏好做出合适的选择。
|
4月前
|
前端开发 测试技术 API
揭秘Ruby on Rails的神秘力量:如何让你的Web应用飞起来?
【8月更文挑战第31天】Ruby on Rails(简称RoR)是一个基于Ruby语言的开源Web应用框架,自2005年发布以来,因简洁的语法、强大的功能和高效的开发效率而广受好评。RoR采用MVC架构,提高代码可读性和可维护性,拥有庞大的社区和丰富的库支持。本文通过示例代码展示其强大之处,并介绍RoR的核心概念与最佳实践,帮助开发者更高效地构建Web应用。
51 0
|
4月前
|
前端开发 API C++
在Ruby世界中寻找你的Web框架灵魂伴侣:Rails vs Sinatra
【8月更文挑战第31天】在Ruby的世界里,选择Web框架如同挑选衣物,需根据场合和需求。Rails与Sinatra是两大热门框架,前者以其“约定优于配置”理念和全面的功能成为企业级应用的首选;后者则以轻量级和灵活性著称,适用于快速原型开发和小规模应用。通过对比两者特性,如Rails的MVC架构与Sinatra的简洁API,我们可以看到它们各有所长。选择合适的框架,如同找到旅途中的最佳伙伴,让开发之路更加顺畅愉悦。这场探索之旅教会我们,没有绝对的好坏,只有最适合的选择。
38 0
|
4月前
|
安全 前端开发 数据安全/隐私保护
如何在Ruby on Rails中打造坚不可摧的OAuth认证机制
【8月更文挑战第31天】在构建现代Web应用时,认证与授权至关重要。本文介绍如何在Ruby on Rails中实现OAuth认证,通过使用`omniauth`和`devise` gems简化流程。首先安装并配置相关gem,接着在`User`模型中处理OAuth回调,最后设置路由及控制器完成登录流程。借助OAuth,用户可使用第三方服务安全地进行身份验证,提升应用安全性与用户体验。随着OAuth标准的演进,这一机制将在Rails项目中得到更广泛应用。
56 0
|
5月前
|
SQL 安全 数据库
Ruby on Rails 数据库迁移操作深度解析
【7月更文挑战第19天】Rails 的数据库迁移功能是一个强大的工具,它帮助开发者以版本控制的方式管理数据库结构的变更。通过遵循最佳实践,并合理利用 Rails 提供的迁移命令和方法,我们可以更加高效、安全地管理数据库结构,确保应用的稳定性和可扩展性。
|
6月前
|
前端开发 测试技术 数据库
Ruby on Rails:快速开发Web应用的秘密
【6月更文挑战第9天】Ruby on Rails,一款基于Ruby的Web开发框架,以其高效、简洁和强大备受青睐。通过“约定优于配置”减少配置工作,内置丰富功能库加速开发,如路由、数据库访问。活跃的社区和海量资源提供支持,MVC架构与RESTful设计确保代码清晰可扩展。高效的数据库迁移和测试工具保证质量。Rails是快速构建Web应用的理想选择,未来将持续影响Web开发领域。
|
7月前
|
开发框架 安全 前端开发
使用Ruby on Rails进行快速Web开发
【5月更文挑战第27天】Ruby on Rails是一款基于Ruby的高效Web开发框架,以其快速开发、简洁优雅和强大的社区支持著称。遵循“约定优于配置”,Rails简化了开发流程,通过MVC架构保持代码清晰。安装Ruby和Rails后,可使用命令行工具创建项目、定义模型、控制器和视图,配置路由,并运行测试。借助Gem扩展功能,优化性能和确保安全性,Rails是快速构建高质量Web应用的理想选择。
|
7月前
|
监控 数据可视化 前端开发
使用Ruby on Rails构建的员工上网行为监控Web应用
我们开发了一款基于Ruby on Rails的员工上网行为监控Web应用,帮助企业保护数据安全和确保员工生产力。该应用利用Rails的MVC架构和Active Record管理数据库,通过网络代理和JavaScript追踪员工网络活动。数据收集后,应用进行分析和可视化,以便识别异常行为。此外,借助Rails的后台任务和Sidekiq gem,实现数据自动化处理和定时更新,为公司提供实时监控反馈。
323 2
|
7月前
|
缓存 前端开发 测试技术
框架分析(6)-Ruby on Rails
框架分析(6)-Ruby on Rails
|
7月前
|
缓存 关系型数据库 数据库
上云一年烧320万美元,成功“下云”六个月后Ruby on Rails之父现身回了 14 个问题!...
上云一年烧320万美元,成功“下云”六个月后Ruby on Rails之父现身回了 14 个问题!...
54 1