天天看點

rails開發流程app檔案夾config檔案夾

一個rails項目的目錄如下圖所示,這個目錄可以通過”rails new 項目名稱”生成

我們主要關注app,config,db這幾個檔案夾的内容。

app檔案夾

app檔案夾中含有rails項目的主要内容:

這裡包含了MVC設計模式中的三個基本部分,即模型(model檔案夾),視圖(view檔案夾),控制器(controllers檔案夾)。

controllers檔案夾:

其中每一個rb腳本就是一個控制器,具體用途。。。

view檔案夾:

主要是儲存網頁頁面的内容

其中每一個檔案夾就是對應一個控制器的視圖檔案,其中一個檔案夾中的内容:

這裡的一個嵌入ruby的html檔案就是一個網頁的頁面,可以看到一個控制器可以對應多個頁面

Model檔案夾:

這裡每個rb腳本都對應一個模型檔案,可以看到不是每個控制器都對應一個模型檔案,隻有需要使用資料庫和資料庫操作的才需要有模型檔案。

config檔案夾

Config檔案夾主要是各種配置檔案,我們要關注的主要是routes.rb檔案,為了了解其作用我們先來了解下rails的執行流程。

         Rails嚴格遵循MVC模式,是以首先使用者在浏覽器中向控制器送出請求。控制器的action處理使用者請求後,決定将指定的視圖頁面呈獻給使用者,而處理結果也在該視圖頁面中呈現。

         例如,在浏覽器位址欄中輸入了http://localhost:3000/user/show/1, rails處理這個請求的流程如下:

1.      為使用者發送一個請求,rails路由器對請求進行解析,

2.      進而決定使用哪個控制器中的哪個action方法來處理使用者請求。

         URL請求格式如下:http://域名:端口/控制器/控制器中action方法名/請求參數 ,

         是以,當使用者發送URL請求,http://localhost:3000/user/show/1,rails将會在應用程式中找到,user控制器,調用show這個action方法,并将1這個參數傳給該方法。

3.      控制器中的方法調用對應的模型對象的業務邏輯方法。模型對象繼承

ActionRecord::Base類,因而具有持久化通路的能力,

         例如,當使用者發送http://localhost:3000/user/show/1請求時,rails調用user控制器中的show方法來處理該請求。如果該方法增加以下代碼:

         @user=User.find(params[:id])

這行代碼實際上調用了,User模型(類)的find(1)方法,User模型類(繼承自

ActionRecord::Base類)與資料庫互動,查找user表中id為1的記錄,并傳回查詢到的User執行個體,并将這個User執行個體設定成控制器的執行個體變量。

4.      控制器将處理結果交給視圖檔案,視圖檔案負責顯示控制器的處理結果。Rails會保證

視圖檔案能通路到控制器中的執行個體變量。

         如果控制器沒有顯示的調用render方法将處理結果送出給視圖頁面,控制器預設把處理結果送出給app\views\控制器名\方法名.html.erb。對于上述請求,控制器user_controller預設将處理結果送出到app\views\user\show.html.erb。然後,在app\views\user\show.html.erb中通路控制器的執行個體變量@user擷取資料庫中的資料。

5.      視圖檔案發送相相應到使用者的浏覽器,最終結果呈現給使用者。

這裡的路由就是rails伺服器工作流程的第一步。

下面我們從路由開始解析上面的例子

routes.rb的代碼如下

resources :people
 
root :to => "welcome#index"
get "welcome/say_hello"=>"welcome#say"
get "welcome" => "welcome#index"
           

get"welcome/say_hello"=>"welcome#say"就是一條簡單的路由

這行代碼的意思就是"welcome/say_hello"這個url對應的是welcome控制器中的say_hello方法。

而上面的resources :people這條語句是一個資源路由,資源路由提供了HTTP響應,控制器action和資料庫CRUD操作之間的映射。

         這行代碼事實上生成了7個不同的路由,這7個路由分别用于新增,檢視,修改和删除等操作。每個路由對應的URL,方法,作用如表所示:

http響應 URL 對應的方法 作用
GET /users index 以清單形式顯示所有資料
GET /users/new new 轉到建立新資料的HTML頁面
POST /users create 建立新的資料
GET /users/1 Show 根據id顯示單條資料
GET /users/1/edit Edit 根據id編輯資料
PUT /users/1 Update 根據id更新資料
DELETE /users/1 destroy 根據id删除資料

然後就到了控制器環節,首先我們了解一下控制器基類,ApplicationController::base

預設情況下,rails應用程式的application類繼承自ActionController::base類,而其他的controller類均繼承自application類。這樣為我們提供了一個統一的接口。

         這個例子的people_controller.rb代碼如下:

class PeopleController <ApplicationController
 before_action :set_person, only: [:show, :edit, :update, :destroy]
 
  #GET /people
  #GET /people.json
  defindex
   @people = Person.all
  End
………………………..
           

動作的預設模闆放在app/views/控制器名稱目錄下,對應的是動作名稱.html.erb檔案,例如上述代碼中的index動作會使用模闆\app\views\people\index.html.erb,并傳遞預設的@people參數。

         \app\views\people\index.html.erb中的代碼如下:

<h1>Listing people</h1>
 
 <tbody>
   <% @people.each do |person| %>
     <tr>
       <td><%= person.name %></td>
       <td><%= person.bio %></td>
       <td><%= person.birthday %></td>
       <td><%= link_to 'Show', person %></td>
       <td><%= link_to 'Edit', edit_person_path(person)%></td>
       <td><%= link_to 'Destroy', person, method: :delete, data: {confirm: 'Are you sure?' } %></td>
     </tr>
   <% end %>
 </tbody>
</table>
 
<br>
 
<%= link_to 'New Person',new_person_path %>
           

這裡将由控制器傳過來的執行個體變量@people顯示出來,這就是rails工作的整個流程。

繼續閱讀