diff --git a/manuscript/Book.txt b/manuscript/Book.txt index 4d18350..0c61cb1 100644 --- a/manuscript/Book.txt +++ b/manuscript/Book.txt @@ -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 diff --git a/manuscript/chapter-02-1-1.txt b/manuscript/chapter-02-1-1.txt index 81e07e3..9c3e09b 100644 --- a/manuscript/chapter-02-1-1.txt +++ b/manuscript/chapter-02-1-1.txt @@ -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 修改成以下內容 diff --git a/manuscript/chapter-02.txt b/manuscript/chapter-02.txt index 6f24633..7f6c142 100644 --- a/manuscript/chapter-02.txt +++ b/manuscript/chapter-02.txt @@ -8,6 +8,3 @@ * 學會 resources 的設定 ( 雙層 resources ) * 使用 before_action 整理程式碼 - - -## \ No newline at end of file diff --git a/manuscript/chapter-03-1-0.txt b/manuscript/chapter-03-1-0.txt new file mode 100644 index 0000000..daff03e --- /dev/null +++ b/manuscript/chapter-03-1-0.txt @@ -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 相關連結 + +~~~~~~~~~ +
  • <%= link_to( "Sign Up" ,new_user_registration_path) %>
  • +
  • <%= link_to( "Login", new_user_session_path ) %>
  • +
  • <%= link_to("Logout",destroy_user_session_path, :method => :delete ) %>
  • +~~~~~~~~~ \ No newline at end of file diff --git a/manuscript/chapter-03-1-1.txt b/manuscript/chapter-03-1-1.txt new file mode 100644 index 0000000..e69de29 diff --git a/manuscript/chapter-03-1-2.txt b/manuscript/chapter-03-1-2.txt new file mode 100644 index 0000000..e69de29 diff --git a/manuscript/chapter-03.txt b/manuscript/chapter-03.txt index 5273147..1881570 100644 --- a/manuscript/chapter-03.txt +++ b/manuscript/chapter-03.txt @@ -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 \ No newline at end of file diff --git a/manuscript/chapter-04.txt b/manuscript/chapter-04.txt index e69de29..d132bd6 100644 --- a/manuscript/chapter-04.txt +++ b/manuscript/chapter-04.txt @@ -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 \ No newline at end of file