一、Demo_app(利用腳手架創建):
1.修改Gemfile
source'https://rubygems.org'
ruby'1.9.3'
gem'rails','4.0.0'
group:developmentdo
gem'sqlite3','1.3.8'
end
gem'sass-rails','4.0.0'
gem'uglifier','2.1.1'
gem'coffee-rails','4.0.0'
gem'jquery-rails','2.2.1'
gem'turbolinks','1.1.1'
gem'jbuilder','1.0.2'
group:docdo
gem'sdoc','0.3.20',require:false
end
group:productiondo
gem'pg','0.15.1'
end
2.在本地安裝gem 時指定--withoutproduction
選項不安裝生產環境所需的gem
$ bundle install --without production
$ bundle update
$ bundle install
(再次提醒,如果Bundler 提示一個和readline
有關的錯誤,請在Gemfile
中加入gem rb-readline
。)
3.然後初始化一個Git 倉庫,做第一次提交
$ git init
$ git add .
$ git commit -m "Initial commit"
4.你可以重新創建一個倉庫然後將代碼推送到GitHub(前提是設好ssh)
$ git remote add origin https://github.com/<username>/demo_app.git
$ git push -u origin master
5.利用腳手架創建(用戶)
$ rails generate scaffold User name:string email:string
6.rake遷移數據庫
bundle exec rake db:migrate
(ps:
運行rake -T db
來查看所有和數據庫有關的任務:
$ bundle exec rake -T db
如果要查看所有的Rake 任務,運行
$ bundle exec rake -T
)
7.rails s 啓動服務器
二,自行創建simple_app
1.
Gemfile
在默認中加入
group :development, :test do
gem 'sqlite3', '1.3.8'
gem 'rspec-rails', '2.13.1'
end
2.$ bundle install
3.動態生成安全權標
config/initializers/secret_token.rb
require'securerandom'
defsecure_token
token_file=Rails.root.join('.secret')
ifFile.exist?(token_file)
# Use the existing token.
File.read(token_file).chomp
else
# Generate a new token and store it in token_file.
token=SecureRandom.hex(64)
File.write(token_file,token)
token
end
end
SampleApp::Application.config.secret_key_base=secure_token
4. 接着我們要設置一下讓Rails 使用RSpec 而不用Test::Unit
。這個設置可以通過rails generate rspec:install
命令實現:
$ rails generate rspec:install
5. 然後剩下的就是初始化Git 倉庫了:3
$ git init
$ git add .
$ git commit -m "Initial commit"
6.新建一個從分支
git checkout –bstatic-pages
7..生成StaticPages 控制器
$ rails generate controller StaticPages home --no-test-framework
(旁註3.2:撤銷操作見3.2)
7.創建頁面需要的注意的
Route裏面的東西寫。
Controller裏面加上Action
Html.erb中寫內容
8.可能會用到嵌入式ruby
<%provide(:title,'Home')%>
<%=yield(:title)%>
類似於jsp
9.爲了提取出相同的結構,Rails提供了一個特別的佈局文件,叫做application.html.erb
默認的
<!DOCTYPE html>
<html>
<head>
<title>SimpleApp2</title>
<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>
<%= csrf_meta_tags %>
</head>
<body>
<%= yield %>
</body>
</html>
注意:默認的Rails 佈局文件包含幾行特殊的代碼:
<%=stylesheet_link_tag...%>
<%=javascript_include_tag"application",...%>
<%=csrf_meta_tags%>
這些代碼會引入應用程序的樣式表和JavaScript 文件(asset pipeline 的一部分);Rails 中的csrf_meta_tags
方法是用來避免“跨站請求僞造”(cross-siterequest forgery,CSRF,一種網絡***)的
10.提交git併合併到master
$ git add .
$ git commit -m "Finish static pages"
$ git checkout master
$ git merge static-pages
1.創建一個新分支:
$ git checkout -b filling_pages
<header class="navbar navbar-fixed-top navbar-inverse">
<div>
<div>
<%=link_to"sample app",'#',id:"logo"%>
<nav>
<ul class="nav pull-right">
<li><%=link_to"Home",'#'%></li>
<li><%=link_to"Help",'#'%></li>
<li><%=link_to"Sign in",'#'%></li>
</ul>
</nav>
</div>
</div>
</header>
我們爲header
標籤指定了三個CSS class3,navbar
、navbar-fixed-top
和navbar-inverse
,用空格分開:
<headerclass="navbar navbar-fixed-top navbar-inverse">
<%=link_to"Sign up now!",'#',class:"btn btn-large btn-primary"%>
注意:兩個裏面的class後面跟的不一樣
2.Bootstrap 是Twitter 開發的框架,可以方便的把精美的Web 設計和用戶界面元素添加到使用HTML5 開發的應用程序中
gem'bootstrap-sass','2.3.2.0'
像往常一樣,運行bundle install
安裝Bootstrap:
$ bundle install
3.添加一行代碼,兼容 Asset Pipeline config/application.rb
classApplication<Rails::Application
.
config.assets.precompile+=%w(*.png *.jpg *.jpeg *.gif)
end
創建custom.css.scss
@import “bootstarp”
重啓服務器
~~~Git所有的併合並
3.User模型
rails generate model User name:string email:string
rake db:migrate
4.增加字段age
rails generate migration add_index_to_users_email
修改文件add_column :users, :age, :string
修改文件add_column :users, :telephone, :string
Rails.env顯示的rails當前的環境
Ps:如何使用gravator頭像
http://rubydoc.info/gems/gravatar_image_tag/1.1.3/frames
健壯參數:
我們需要params
Hash 包含:user
元素,而且只允許傳入name
、email
、password
和password_confirmation
屬性。所需代碼如下:
params.require(:user).permit(:name,:email,:password,:password_confirmation)
一個很強大的密碼保護方式:(僅僅只要一句話)
has_secure_password
注意兩個:
@user.errors.any?
@user.errors.full_messages
Flash{success:’’,error:’dfs’}
注:
Users 資源對應的路由
HTTP 請求 | URL | 動作 | 具名路由 | 作用 |
GET | /users | index | users_path | 顯示所有用戶的頁面 |
GET | /users/1 | show | user_path(user) | 顯示某個用戶的頁面 |
GET | /users/new | new | new_user_path | 創建(註冊)新用戶的頁面 |
POST | /users | create | users_path | 創建新用戶 |
GET | /users/1/edit | edit | edit_user_path(user) | 編輯id 爲1 的用戶頁面 |
PATCH | /users/1 | update | user_path(user) | 更新用戶信息 |
DELETE | /users/1 | destroy | user_path(user) | 刪除用戶 |
關於登錄功能
1.首先我們要生成Sessions控制器
rails generate controller Sessions --no-test-framework
我們要生成記憶權標屬性,執行如下命令:
$ rails generate migration add_remember_token_to_users
classAddRememberTokenToUsers<ActiveRecord::Migration
defchange
add_column:users,:remember_token,:string
add_index:users,:remember_token
end
end
rake db:migrate
我們添加了一個回調函數,在用戶存入數據庫之前生成記憶權標:
before_create:create_remember_token
2.Active Record 是把模型的屬性和數據庫表中的列對應的,如果不指定self
的話,我們就只是創建了一個名爲remember_token
的局部變量而已,這可不是我們期望得到的結果。加上self
之後,賦值操作就會把值賦值給用戶的remember_token
屬性,保存用戶時,隨着其他的屬性一起存入數據庫。
cookies[:remember_token]={value:remember_token,
expires:20.years.from_now.utc}
因爲開發者經常要把cookie 的失效日期設爲20 年後,所以Rails 特別提供了permanent
方法,前面處理cookie 的代碼可以改寫成:
cookies.permanent[:remember_token]=remember_token
3.關於更新功能
事前過濾器(beforefilter)“實現訪問限制。
Before_action :method_name{:edit,:update}
Gemfile
中加入faker
#encoding:utf-8
namespace :db do
desc"Fill database with sample data"
taskpopulate: :environment do
User.create!(name:"實力用戶",
email: "[email protected]",
password: "foobar",
password_confirmation: "foobar")
99.timesdo |n|
name = Faker::Name.name
email ="example-#{n+1}@www.org"
password = "111111"
User.create!(name:name,
email: email,
password: password,
password_confirmation: password)
end
end
end
$ bundle exec rake db:reset//重置
$ bundle exec rake db:populate
$ bundle exec rake test:prepare//
關於分頁
gem'will_paginate','3.0.4'
gem'bootstrap-will_paginate','0.0.9'
bundle install
頁面
<%= will_paginate %>
Controller裏面
User.paginate(page:params[:page])
添加管理員
注意這些代碼吧
def sign_in(user)
remember_token=User.new_remember_token
cookies.permanent[:remember_token] = remember_token
user.update_attribute(:remember_token,User.encpty(remember_token))
self.current_user=user
end
def signd_in?
!current_user.nil?
end
def current_user=(user)
@current_user=user
end
# 當前的用戶
def current_user
remember_token=User.encpty(cookies[:remember_token])
@current_user||=User.find_by(remember_token:remember_token)
end
def current_user?(user)
user == current_user
end
加上微博
Model ,add index ,migrate date
表格10.1:用戶和微博關聯後所得方法的簡介
方法 | 作用 |
micropost.user | 返回該微博對應的用戶對象 |
user.microposts | 返回該用戶的所有微博數組 |
user.microposts.create(arg) | 創建一篇微博(user_id = user.id) |
user.microposts.create!(arg) | 創建一篇微博(失敗時拋出異常) |
user.microposts.build(arg) | 生成一個新的微博對象(user_id = user.id) |
classMicropost<ActiveRecord::Base
belongs_to:user
#倒序輸出博客
default_scope->{order('created_at DESC')}
validates:user_id,presence:true
end
類似效果的代碼:
<li>
<p><%=f.label :login, "
帳號:
" %>
<%= f.text_field:login, :placeholder =>"
用戶名或郵箱
"%></p>
</li>
<li><%=f.label :password, "
密碼:
" %>
<%=f.password_field :password %>
</li>