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

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

安装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. java笔记14之private

    private:        1 是一个权限修饰符        2 可以修饰成员变量和成员方法        被其修饰的成员只能在本类中被访问 class Demo { //int num = 1 ...

  2. @Resource 和 @Autowired注解的异同

    @Resource 和 @Autowired注解的异同 @Autowired 默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false 例 ...

  3. 通过linux ssh远程登录另一台Linux,无需密码,用证书验证

    1.首先登入一台linux服务器,此台做为母机(即登入其他linux系统用这台做为入口):执行一行命令生成key文件:ssh-keygen -t rsa 2.在母机上,进入/roo/.ssh目录,找到 ...

  4. [Javascript] Intro to Recursion - Refactoring to a Pure Function

    Previous post: http://www.cnblogs.com/Answer1215/p/4990418.html let input, config, tasks; input = [' ...

  5. Linux 磁盘挂载和mount共享

      针对Linux服务器的磁盘挂载mount和共享做简单操作说明: 1.  查看已使用的磁盘情况 df –h 2.  查看所有磁盘 fdisk –l 3.  查看指定磁盘“/dev/xvde”的分区情 ...

  6. JAVA实现AES和MD5加密

    package test; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; ...

  7. JS和利用openssl的object C加密得到相同的aes加密密文

    这是之前接到的一个工作内容,项目原本的登录操作是获得账号和密码以后,对密码进行一遍MD5加密,然后传递账号和密文到cgi文件.在c中获取到账户以后,从数据库中获取到密码,对密码进行一次MD5的加密,然 ...

  8. 手势识别 GestureDetector ScaleGestureDetector

    识别器GestureDetector基本介绍 当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等.一般情况下,我们可以通过View或Activity的onTouch ...

  9. hdu 1205

    #include <stdio.h> int a[1005000]; int main() { int t; scanf("%d",&t); while(t-- ...

  10. 数据类型转换中的一些特殊情况(JY06-JavaScript)

    1.字符串的不可变性 字符串定义了后,会一直占据内存空间,企鹅该处内存空间(栈)不可被重新赋值. 2.短路运算 ||.&& 二元运算符,返回参与运算的操作数的原值(原数据类型和原数据) ...