我的ruby on rails學習筆記

一、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 forgeryCSRF,一種網絡***)的

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 class3navbarnavbar-fixed-topnavbar-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


健壯參數:

我們需要paramsHash 包含:user元素,而且只允許傳入nameemailpasswordpassword_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

spacer.gif類似效果的代碼:

<li>

         <p><%=f.label :login, "帳號:" %>

           <%= f.text_field:login, :placeholder =>"用戶名或郵箱"%></p>

       </li>


       <li><%=f.label :password, "密碼:" %>

         <%=f.password_field :password %>

</li>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章