2014-12-04 57 views
1

我試圖去掌握與Rails和我堅持獲得8問題多選題問題測驗工作。Rails:Devise form.submit按鈕背後的邏輯是什麼?

我想我理解事物的MVC方面。來自瀏覽器的請求通過一個控制器。它要求模型提供信息,將其發送到視圖並將內容返回給瀏覽器(如果我錯了,請糾正我)。

我不明白(至少很清楚)頁面'知道'如何鏈接到。我認爲,當你生成一個資源時,你會得到映射到路徑的大量路線。我不明白這些路徑何時相關。

是否有人請向我解釋(如果有必要,一步一步地)設計表單中的提交按鈕'知道'在哪裏鏈接?

我的形式,到目前爲止,看起來是這樣的:

<%= form_for([current_user]) do |f| %> 
    <p> 
    <%= f.check_box :quiz_answers %> 
    </p> 
    <p> 
    <%= f.submit("Get my results!") %> 
    </p> 
<% end %> 

我什麼也看不到在那裏名稱的路徑或路線。那麼,如何生成鏈接?

我檢查過耙路線,但我不認爲我讚賞這個列表的重要性。如果有人能夠解釋它背後的含義,那就太好了。

回答

0

我會盡力解釋它。

有幾種類型,你可以通過網頁發送方法: -GET -POST -DELETE -put

打通鏈路發送參數。您可以在URL中查看其參數,例如www.google.ba?you_are=user,you_are是參數,其值是用戶。

通過包發送參數,所以你不能在URL中看到任何東西,但信息在那裏。

其他方法是用於安靜服務的POST方法的變體。

對於你的問題,devise默認創建了一些在routes.rb中不可見的路由。任何通過你的網頁發出的請求會轉到routes.rb,檢查它應該放在哪裏,然後發送給相應的控制器。然後控制器將參數做一些邏輯(將其委託給服務和其他事物),爲展示準備模型,然後將其委託給模板。然後,將包含所有信息(呈現)的模板發送到Web瀏覽器。

有一點值得一提,資源或設計會爲每個對應操作的方法創建默認操作。在這種情況下,你只需要設置模型,它知道在哪裏委託它。

這裏是我的色器件航線(其中有些是自定義):

new_user_session GET  /users/sign_in(.:format)         user_sessions#new 
        user_session POST  /users/sign_in(.:format)         user_sessions#create 
      destroy_user_session DELETE /users/sign_out(.:format)         user_sessions#destroy 
        user_password POST  /users/password(.:format)         passwords#create 
       new_user_password GET  /users/password/new(.:format)        passwords#new 
      edit_user_password GET  /users/password/edit(.:format)        passwords#edit 
           PATCH /users/password(.:format)         passwords#update 
           PUT  /users/password(.:format)         passwords#update 
     cancel_user_registration GET  /users/cancel(.:format)          users#cancel 
       user_registration POST  /users(.:format)           users#create 
      new_user_registration GET  /users/sign_up(.:format)         users#new 
     edit_user_registration GET  /users/edit(.:format)          users#edit 
           PATCH /users(.:format)           users#update 
           PUT  /users(.:format)           users#update 
           DELETE /users(.:format)           users#destroy 
       user_confirmation POST  /users/confirmation(.:format)        confirms#create 
      new_user_confirmation GET  /users/confirmation/new(.:format)       confirms#new 
           GET  /users/confirmation(.:format)        confirms#show 

使用耙航線終端命令找出所有的路線。

+0

我已經有非設計頁面鏈接,所以我不認爲我需要做更多的。 Devise可能知道在哪裏「委託」一個請求,但我不知道它在哪裏發送請求。我想知道它連接的位置(以及希望的原因)。我已經多次檢查耙路線,但我不確定我應該從列表中推斷出什麼。 – moosefetcher 2014-12-04 15:49:47

+0

看看第三欄。它說(例如,G。用戶#編輯)。這意味着它將重定向到用戶控制器,編輯操作。所以第一個參數是用戶(UsersController),另一個是該控制器內的操作(​​在示例編輯中)。每個MVC應用程序都必須知道將請求發送到哪裏,這就是爲什麼我們需要路由,這就是爲什麼請求需要/鏈接到。 – Miknash 2014-12-04 15:54:10

相關問題