Ruby on Rails Tutorial读书笔记-1
只是怕忘了命令,全部撸一次,记个大概。。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
安装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的更多相关文章
- Ruby on Rails Tutorial 第2版 学习笔记
Ruby on Rails Tutorial 第2版 在线阅读:http://railstutorial-china.org/ 英文版:http://ruby.railstutorial.org/ru ...
- Ruby on Rails Tutorial 第一章 之 简介
1.目标:掌握MVC和REST.生成器.迁移.路由.嵌入式Ruby 本书涉及Rails,Ruby语言,Rails默认使用的测试框架(MiniTest),Unix命令行,HTML,CSS,少量的Java ...
- Ruby on Rails Tutorial 第一章笔记
搭建开发环境 作者介绍了 Cloud9\ Coding.net 这样的云端开发环境 安装 Rails 1. 新建 rails 应用 首先,调用 rails new 命令创建一个新的 Rails 应用, ...
- Ruby on Rails Tutorial 第四章 Rails背后的Ruby 之 字符串
1.辅助方法 2.字符串 输入“irb”进入Ruby命令行开发环境,控制器的启动方法是在命令行中执行“rails console”. (1)字符串连接 >>"foo"+ ...
- Ruby on Rails Tutorial 第三章 静态页面
1.生成静态页面 $ rails generate controller StaticPages home help #生成主页和帮助页面的路由.控制器及静态页面 $ rails destroy ...
- Ruby on Rails Tutorial 第二章 之 用户资源&MVC&REST
说明:用户资源包括用户数据模型和这个模型相关的Web页面. 1.用户数据模型如下: 2.使用Rails内置的脚手架生成用户资源中,执行如下所示命令: $ rails generate scaffold ...
- Ruby on Rails Tutorial 第一章 之 搭建开发环境
云端开发环境,Cloud9(https://ide.c9.io/).这个开发环境预先安装好了Rails开发所需要的大多数软件,包括Ruby.RubyGems和Git,需要自己安装Rails. 1.安装 ...
- Ruby on Rails Tutorial 第六章 用户模型
1.用户模型(1)数据库迁移Rails默认使用关系数据库存储数据,数据库中的表有数据行组成,每一行都有相应的列,对应数据属性.把列名命名为相应的名字后,ActiveRecord会自动把他们识别为用户对 ...
- Ruby on Rails Tutorial 第五章 完善布局
本章目标:局部视图.Rails路由.Asset Pipeline.Sass1.Bootstrap是Twitter开发的开源Web设计框架mockup是网页构思图,在web领域经常称之为“线框图”,用于 ...
随机推荐
- java笔记14之private
private: 1 是一个权限修饰符 2 可以修饰成员变量和成员方法 被其修饰的成员只能在本类中被访问 class Demo { //int num = 1 ...
- @Resource 和 @Autowired注解的异同
@Resource 和 @Autowired注解的异同 @Autowired 默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false 例 ...
- 通过linux ssh远程登录另一台Linux,无需密码,用证书验证
1.首先登入一台linux服务器,此台做为母机(即登入其他linux系统用这台做为入口):执行一行命令生成key文件:ssh-keygen -t rsa 2.在母机上,进入/roo/.ssh目录,找到 ...
- [Javascript] Intro to Recursion - Refactoring to a Pure Function
Previous post: http://www.cnblogs.com/Answer1215/p/4990418.html let input, config, tasks; input = [' ...
- Linux 磁盘挂载和mount共享
针对Linux服务器的磁盘挂载mount和共享做简单操作说明: 1. 查看已使用的磁盘情况 df –h 2. 查看所有磁盘 fdisk –l 3. 查看指定磁盘“/dev/xvde”的分区情 ...
- JAVA实现AES和MD5加密
package test; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; ...
- JS和利用openssl的object C加密得到相同的aes加密密文
这是之前接到的一个工作内容,项目原本的登录操作是获得账号和密码以后,对密码进行一遍MD5加密,然后传递账号和密文到cgi文件.在c中获取到账户以后,从数据库中获取到密码,对密码进行一次MD5的加密,然 ...
- 手势识别 GestureDetector ScaleGestureDetector
识别器GestureDetector基本介绍 当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等.一般情况下,我们可以通过View或Activity的onTouch ...
- hdu 1205
#include <stdio.h> int a[1005000]; int main() { int t; scanf("%d",&t); while(t-- ...
- 数据类型转换中的一些特殊情况(JY06-JavaScript)
1.字符串的不可变性 字符串定义了后,会一直占据内存空间,企鹅该处内存空间(栈)不可被重新赋值. 2.短路运算 ||.&& 二元运算符,返回参与运算的操作数的原值(原数据类型和原数据) ...