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

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

安装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. Migration workstation vms to openstack kvm

    Migration workstation vms to openstack kvm 分别分成(磁盘是否拆分,vms 是否 有多个磁盘驱动器) 1, linux迁移 vmware workstatio ...

  2. 果酷:80后IT男“鲜果切”年入千万 _ 财经频道 _ 东方财富网(Eastmoney.com)

    果酷:80后IT男"鲜果切"年入千万 _ 财经频道 _ 东方财富网(Eastmoney.com) 果酷:80后IT男"鲜果切"年入千万

  3. Q - Tour - hdu 3488(最小匹配值)

    题意:一个王国有N个城市,M条路,都是有向的,现在可以去旅游,不过走的路只能是环(至少也需要有两个城市),他们保证这些城市之间的路径都是有环构成的,现在至少需要走多少路. 分析:因为是有向图所以,而且 ...

  4. eclipse 错误: 找不到或无法加载主类

    在src文件夹上移除Source Folder,再点右键-Build Path-Use as Source Folder,重新进行编译,一切正常了.

  5. MySQL定时事件

    1.创建一个测试表 CREATE TABLE aaa (timeline TIMESTAMP); 2.创建一个事件:每秒插入一条记录到数据表 CREATE EVENT e_test_insert SE ...

  6. 技能CDDemo(点击鼠标左键实现技能界面旋转)

    using UnityEngine; using System.Collections; using UnityEngine.UI; public class HealthController : M ...

  7. Brunch:快捷的HTML5构建工具

    Brunch,一个超快的HTML5构建工具.它可以(官方介绍): 编译你的脚本,模板,样式,链接它们, 将脚本和模板封装进common.js/AMD模块里,链接脚本和样式, 为链接文件生成源地图,复制 ...

  8. [Flexbox] Using flex-direction to layout content horizontally and vertically

    The Flexbox css spec allows for more adjustable layouts. The flex-directionproperty allows you to ea ...

  9. [Javascript] What is JavaScript Function Currying?

    Currying is a core concept of functional programming and a useful tool for any developer's toolbelt. ...

  10. 无限循环的ViewPager

    目前情况 在不修改源码的情况下,当ViewPager滑动到最后一个item的时候,他就无法再往右滑动:当ViewPager滑动到第一个item的时候,他也无法再往前滑动.(以上全是废话) 设想 我们可 ...