Skip to content

Commit

Permalink
add devise
Browse files Browse the repository at this point in the history
  • Loading branch information
xdite committed May 31, 2013
1 parent fcc7cb5 commit e967f83
Show file tree
Hide file tree
Showing 8 changed files with 175 additions and 140 deletions.
6 changes: 4 additions & 2 deletions manuscript/Book.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,10 @@ chapter-02-1-5.txt
chapter-02-1-6.txt
chapter-02-1-7.txt
chapter-03.txt
chapter-03-1.txt
chapter-03-2.txt
chapter-03-1-1.txt
chapter-03-1-2.txt
chapter-03-1-3.txt
chapter-03-1-4.txt
chapter-04.txt
chapter-04-1.txt
chapter-04-2.txt
Expand Down
2 changes: 1 addition & 1 deletion manuscript/chapter-02-1-1.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{::pagebreak :/}

## Ch 2.1.1 Groups controller 的 show 裡面撈出相關的 Post
## Ch 2.1.1 Groups controller 的 show 裡面撈出相關的 Post

到 `app/controllers/groups_controller.rb`,將 show 修改成以下內容

Expand Down
3 changes: 0 additions & 3 deletions manuscript/chapter-02.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,3 @@
* 學會 resources 的設定 ( 雙層 resources )
* 使用 before_action 整理程式碼



##
44 changes: 44 additions & 0 deletions manuscript/chapter-03-1-0.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
{::pagebreak :/}

## Ch 3.1.0 安裝 devise

### 安裝 gem

Rails 內,安裝 gem 的方式是透過 Bundler 這個工具。具體方式是修改 `Gemfile` 這個檔案,加入所需要安裝的 gem,再執行 `bundle install`,即能安裝完畢。

### 安裝 devise


[devise](https://github.com/plataformatec/devise) 是目前 Rails 界最被廣為使用的認證系統。其彈性的設計支援很多實務上的需求,如:鎖定賬號(Lockable)、需要認證(Confirmable)、取回帳號(Recoverable)、與第三方認證如 Facebook 整合( OmniAuthable)。

在本書裡面我們使用的 Boostrappers 內建即幫我們安裝好 `devise` 這個 gem。

不過你還是可以開一個空專案,實際裝一下練習看看。


修改 `Gemfile`

~~~~~~~~~
gem 'devise'
~~~~~~~~~

使用 bundle 安裝

`bundle install`

產生必要檔案

`rails g devise:install`

產生 user model 檔案

`rails generate devise user`


#### devise 相關連結

~~~~~~~~~
<li> <%= link_to( "Sign Up" ,new_user_registration_path) %> </li>
<li> <%= link_to( "Login", new_user_session_path ) %> </li>
<li> <%= link_to("Logout",destroy_user_session_path, :method => :delete ) %> </li>
~~~~~~~~~
Empty file added manuscript/chapter-03-1-1.txt
Empty file.
Empty file added manuscript/chapter-03-1-2.txt
Empty file.
140 changes: 6 additions & 134 deletions manuscript/chapter-03.txt
Original file line number Diff line number Diff line change
@@ -1,147 +1,19 @@
# 練習作業 3 - 為 Group 加入使用者機制

## 作業目標

為討論區加入使用者機制,使用者必須能夠 註冊 / 登入,登入後才可以發表 Post,不然只能瀏覽。只有自己的 Post 才能進行修改與刪除。
在上一章我們完成了在 Group 裡面發表文章的功能。但是通常一個討論區的機制,必須是先加入會員才能進行相關動作。所以我們必須為討論區加入使用者機制:

使用者必須能夠 註冊 / 登入,登入後才可以發表 Post,不然只能瀏覽。只有自己的 Post 才能進行修改與刪除。

## 練習主題

* gem / plugin 安裝與使用
* routes 優先權與 route alias
* [before_filter](http://apidock.com/rails/v2.3.8/ActionController/Filters/ClassMethods/before_filter) 的使用及其效果
* 利用 before_filter : login_required 加入登入判斷
* 為 controller 中部分 action 加上 login_required
* 安裝 gem
* 設定 devise
* 撰寫全域的 method `login_required`
* 利用 before_action 結合 login_required 加入登入判斷
* session 的使用:current_user



## 參考資料

* [devise](https://github.com/plataformatec/devise/wiki)


## 作業解答

TODO

# 練習作業 4 - 為 Group 加入管理者機制以及管理者後台

## 作業目標


實作簡單的 admin 機制:

* admin 擁有一個後台,可以刪改所有文章。
* admin 可以新增文章 / 刪除文章
* 網址是 http://groupme.dev/admin/posts
* 有身分是 admin 的人可以進後台。
* admin 的判別方是 column 裡加一個 boolean,判斷是否 admin。
* 這個 attribute 必須用 attr_accessible / attr_protected 保護。

## 練習主題

* 學習如何實作 admin 身分
* 利用 [attr_accessible](http://apidock.com/rails/v3.0.7/ActiveModel/MassAssignmentSecurity/ClassMethods/attr_accessible) / [attr_protected](http://apidock.com/rails/v3.0.7/ActiveModel/MassAssignmentSecurity/ClassMethods/attr_protected) 保護重要欄位不被竄改
* 實作 namespace routing
* 利用 before_filter : require_is_admin 檢查 admin 權限

## 作業解答

TODO

# 練習作業 5 - 為文章列表加入分頁機制

## 作業目標

* 文章列表要能夠分頁
* 每一頁 5 筆
* 每篇文章要秀出現在有多少 comment 數量
* 文章列表的排序要以發表時間以 DESC 排序。

## 練習主題

* 使用 [counter_cache](http://railscasts.com/episodes/23-counter-cache-column) 取代直接對資料庫的 count
* 實作看板分頁(pagination)機制
* 練習使用 scope 機制包裝不同 condition 的 SQL query


## 作業解答

TODO


# 練習作業 6 - 每一篇文章可以上傳附件(圖片)


## 作業目標

發表文章時可以順便夾帶一張附件。


## 練習主題

* 使用 [form_for](http://apidock.com/rails/ActionView/Helpers/FormHelper/form_for) :multipart => true 上傳
多媒體
* 學習使用 paperclip 縮圖

## 參考資料

[paperclip](https://github.com/thoughtbot/paperclip/wiki)

## 作業解答

TODO

# 練習作業 7 - 撰寫自動化 Rake 以及 db:seed


## 作業目標

用 Rake 撰寫自動化步驟,生假資料。

寫一個 rake 可以達成以下步驟:「砍 db => 建 db => 跑 migration => 生種子資料」,另一個 rake 是生假文章與假留言。

## 練習主題

* 操作 rake -T
* 撰寫一個 task 可以自動連續執行 rake db:drop ; rake db:create ; rake db:migrate ; rake db:seed
* 撰寫一個 task 可以執行 rake dev:fake 生假資料 ( 自己寫 namespace : dev, 裡面放一個 task 叫做 fake,fake 資料用 Populator 生) # 請自行練習


## 參考資料

* [Ruby on Rails Rake Tutorial](http://jasonseifer.com/2010/04/06/rake-tutorial)
* [What’s New in Edge Rails: Database Seeding](http://ryandaigle.com/articles/2009/5/13/what-s-new-in-edge-rails-database-seeding)

## 作業解答

TODO


# 練習作業 8 - 將 Groupme deploy 到租來的 VPS


## 作業目標

在租來的 VPS 上面建置 Ruby on Rails production 環境,使用 Ruby Enterprise Edition 與 mod_rails。使用 [Capistrano](https://github.com/capistrano/capistrano/wiki) 佈署 application。

## 練習主題

* 學會如何自動部署專案
* 使用 capistrano 自動部署專案
* 操作 cap deploy:setup
* 操作 cap deploy
* 操作 cap deploy:rollback
* 操作 cap deploy:restart


## 參考資料

* [rails-nginx-passenger-ubuntu](https://github.com/jnstq/rails-nginx-passenger-ubuntu)
* [AWDR4](http://pragprog.com/titles/rails4/agile-web-development-with-rails) deploy 章節


## 作業解答

TODO
120 changes: 120 additions & 0 deletions manuscript/chapter-04.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
# 練習作業 4 - 為 Group 加入管理者機制以及管理者後台

## 作業目標


實作簡單的 admin 機制:

* admin 擁有一個後台,可以刪改所有文章。
* admin 可以新增文章 / 刪除文章
* 網址是 http://groupme.dev/admin/posts
* 有身分是 admin 的人可以進後台。
* admin 的判別方是 column 裡加一個 boolean,判斷是否 admin。
* 這個 attribute 必須用 attr_accessible / attr_protected 保護。

## 練習主題

* 學習如何實作 admin 身分
* 利用 [attr_accessible](http://apidock.com/rails/v3.0.7/ActiveModel/MassAssignmentSecurity/ClassMethods/attr_accessible) / [attr_protected](http://apidock.com/rails/v3.0.7/ActiveModel/MassAssignmentSecurity/ClassMethods/attr_protected) 保護重要欄位不被竄改
* 實作 namespace routing
* 利用 before_filter : require_is_admin 檢查 admin 權限

## 作業解答

TODO

# 練習作業 5 - 為文章列表加入分頁機制

## 作業目標

* 文章列表要能夠分頁
* 每一頁 5 筆
* 每篇文章要秀出現在有多少 comment 數量
* 文章列表的排序要以發表時間以 DESC 排序。

## 練習主題

* 使用 [counter_cache](http://railscasts.com/episodes/23-counter-cache-column) 取代直接對資料庫的 count
* 實作看板分頁(pagination)機制
* 練習使用 scope 機制包裝不同 condition 的 SQL query


## 作業解答

TODO


# 練習作業 6 - 每一篇文章可以上傳附件(圖片)


## 作業目標

發表文章時可以順便夾帶一張附件。


## 練習主題

* 使用 [form_for](http://apidock.com/rails/ActionView/Helpers/FormHelper/form_for) :multipart => true 上傳
多媒體
* 學習使用 paperclip 縮圖

## 參考資料

[paperclip](https://github.com/thoughtbot/paperclip/wiki)

## 作業解答

TODO

# 練習作業 7 - 撰寫自動化 Rake 以及 db:seed


## 作業目標

用 Rake 撰寫自動化步驟,生假資料。

寫一個 rake 可以達成以下步驟:「砍 db => 建 db => 跑 migration => 生種子資料」,另一個 rake 是生假文章與假留言。

## 練習主題

* 操作 rake -T
* 撰寫一個 task 可以自動連續執行 rake db:drop ; rake db:create ; rake db:migrate ; rake db:seed
* 撰寫一個 task 可以執行 rake dev:fake 生假資料 ( 自己寫 namespace : dev, 裡面放一個 task 叫做 fake,fake 資料用 Populator 生) # 請自行練習


## 參考資料

* [Ruby on Rails Rake Tutorial](http://jasonseifer.com/2010/04/06/rake-tutorial)
* [What’s New in Edge Rails: Database Seeding](http://ryandaigle.com/articles/2009/5/13/what-s-new-in-edge-rails-database-seeding)

## 作業解答

TODO


# 練習作業 8 - 將 Groupme deploy 到租來的 VPS


## 作業目標

在租來的 VPS 上面建置 Ruby on Rails production 環境,使用 Ruby Enterprise Edition 與 mod_rails。使用 [Capistrano](https://github.com/capistrano/capistrano/wiki) 佈署 application。

## 練習主題

* 學會如何自動部署專案
* 使用 capistrano 自動部署專案
* 操作 cap deploy:setup
* 操作 cap deploy
* 操作 cap deploy:rollback
* 操作 cap deploy:restart


## 參考資料

* [rails-nginx-passenger-ubuntu](https://github.com/jnstq/rails-nginx-passenger-ubuntu)
* [AWDR4](http://pragprog.com/titles/rails4/agile-web-development-with-rails) deploy 章節


## 作業解答

TODO

0 comments on commit e967f83

Please sign in to comment.