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

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

安装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>

Ruby on Rails Tutorial读书笔记-1的更多相关文章

  1. Ruby on Rails Tutorial 第2版 学习笔记

    Ruby on Rails Tutorial 第2版 在线阅读:http://railstutorial-china.org/ 英文版:http://ruby.railstutorial.org/ru ...

  2. Ruby on Rails Tutorial 第一章 之 简介

    1.目标:掌握MVC和REST.生成器.迁移.路由.嵌入式Ruby 本书涉及Rails,Ruby语言,Rails默认使用的测试框架(MiniTest),Unix命令行,HTML,CSS,少量的Java ...

  3. Ruby on Rails Tutorial 第一章笔记

    搭建开发环境 作者介绍了 Cloud9\ Coding.net 这样的云端开发环境 安装 Rails 1. 新建 rails 应用 首先,调用 rails new 命令创建一个新的 Rails 应用, ...

  4. Ruby on Rails Tutorial 第四章 Rails背后的Ruby 之 字符串

    1.辅助方法 2.字符串 输入“irb”进入Ruby命令行开发环境,控制器的启动方法是在命令行中执行“rails console”. (1)字符串连接 >>"foo"+ ...

  5. Ruby on Rails Tutorial 第三章 静态页面

    1.生成静态页面 $ rails generate controller StaticPages home help    #生成主页和帮助页面的路由.控制器及静态页面 $ rails destroy ...

  6. Ruby on Rails Tutorial 第二章 之 用户资源&MVC&REST

    说明:用户资源包括用户数据模型和这个模型相关的Web页面. 1.用户数据模型如下: 2.使用Rails内置的脚手架生成用户资源中,执行如下所示命令: $ rails generate scaffold ...

  7. Ruby on Rails Tutorial 第一章 之 搭建开发环境

    云端开发环境,Cloud9(https://ide.c9.io/).这个开发环境预先安装好了Rails开发所需要的大多数软件,包括Ruby.RubyGems和Git,需要自己安装Rails. 1.安装 ...

  8. Ruby on Rails Tutorial 第六章 用户模型

    1.用户模型(1)数据库迁移Rails默认使用关系数据库存储数据,数据库中的表有数据行组成,每一行都有相应的列,对应数据属性.把列名命名为相应的名字后,ActiveRecord会自动把他们识别为用户对 ...

  9. Ruby on Rails Tutorial 第五章 完善布局

    本章目标:局部视图.Rails路由.Asset Pipeline.Sass1.Bootstrap是Twitter开发的开源Web设计框架mockup是网页构思图,在web领域经常称之为“线框图”,用于 ...

随机推荐

  1. E - Just a Hook - hdu 1698(区间覆盖)

    某个英雄有这样一个金属长棍,这个金属棍有很多相同长度的短棍组成,大概最多有10w节,现在这个人有一种魔法,他可以把一段区间的金属棍改变成别的物质,例如金银或者铜, 现在他会有一些操作在这个金属棍上,他 ...

  2. Java中直接输出一个类的对象

    例如 package com.atguigu.java.fanshe; public class Person { String name; private int age; public Strin ...

  3. Java学习路线图·影响一代又一代程序员的经典书籍!(转)

    转自:http://www.douban.com/group/topic/50353428/ 基础篇 ·Java核心技术 卷1 基础知识(原书第9版)最新版·中文版 第13届Jolt生产效率大奖获奖图 ...

  4. 在Android项目中启用Java 8的部分特性--Lambda & Method References

    Android N发布时同时发布了一个新的编译工具Jack(AS2.1+支持),基于Jack我们可以使用Java 8 的部分特性,在低版本机器上能使用的更少,同时Jack也有诸多不完善,工具链的改变难 ...

  5. Hbase设计实战

    Hbase设计实战 本文通过一个游戏公司客户实际案例的讲解,分析了 Hbase 表设计及开发在实际案例中的运用,对比了不同的 Hbase 设计考量对客户端访问模式及检索性能的差异.读者通过案例中 Hb ...

  6. wpf异常:指定的 Visual 不是此 Visual 的上级问题处理解析

    WPF在画线的时候,调用Control0.TransformToAncestor(Control1).Transform(new System.Windows.Point(0, 0))方法转换坐标的时 ...

  7. canvas 下载

    function saveFile(data, filename){ var save_link = document.createElementNS('http://www.w3.org/1999/ ...

  8. java的final变量理解

    java的final变量理解 final基本类型是数值不能改变 final对象是引用不能改变,对象其自身是可以被修改的.

  9. wildfly部署solr.war

    1.添加solr/home配置,有两种途径: 一个是修改solr.war包的web.xml,路径如下:solr-4.7.2.rar\WEB-INF\web.xml,添加如下内容:

  10. require(),include(),require_once()和include_once()之间的区别

    引用文件的方法有两种:require 及 include. require 的使用方法如 require("file.php"); .这个函数通常放在 PHP 程序的最前面,PHP ...