2016-04-30 54 views
0

我是一般的編程新手,有人提到我到railstutorial.org。Rails教程 - 無法獲取路徑來識別路線

規格:我正在研究cloud9 IDE,正如教程中所建議的。

信息:我在1.3的rails教程中,它是設置根路線。 問題是最初我的路由沒有影響服務器啓動(根頁面仍然是ruby默認的,而不是'application#hello')。以下是教程說要編輯的文件。

的routes.rb

Rails.application.routes.draw do 
root to: 'application#hello' 
end 

application_controller.rb

class ApplicationController < ActionController::Base 
protect_from_forgery with: :exception 
def hello 
render text: "Hello, world!" 
end 
end 

有很多是被默認成我離開了文件的註釋。

我按照說明精確。在我第一次遇到麻煩之後,我想我可能已經發生了安裝錯誤,所以我刪除了我的IDE並重新啓動,特別注意細節,特別是版本。

我已經試過$耙路線,我的理解它給人的消息:

You don't have any routes defined! 

這使我相信,問題是的routes.rb文件。我曾試圖改變語法:

root to: 'application#hello' 

我不知道了一大堆,比如它如何使用應用程序工作,所以我也試過:

root 'ApplicationController#hello' 

root to: 'ApplicationController#hello' 

這些都導致沒有路由定義的消息。我不知道發生了什麼事。

感謝您的任何意見或幫助!

+0

'根:「應用程序#hello''和'根」應用#hello''做同樣的事情 - 後來是一條捷徑。由於rails查找控制器的方式,'root'ApplicationController#hello''將不起作用。 – max

回答

1

您可以在您的航線上嘗試root 'application#hello'。另外,在嘗試瀏覽器之前忘記保存文件等簡單的事情時,可能會漏掉;重新啓動服務器需要處理數量驚人的弱點。

rails documentation還可以爲您提供超出本教程的更多信息。

+0

謝謝!我保存了該文件,現在它正在工作。大概2個小時的挫折感,它通過一個簡單的文件保存解決... – ncooper09

+0

很高興它工作:) – gonzalo2000

1

你可能想移動ApplicationController到另一個控制器之外的行動,但如果你真的堅持,你可以把這個到您的routes.rb

get '/hello', to: 'application#hello', as: :hello

如果你希望頁面是root,我建議在那裏創建一個StaticPagesController並定義hello,而不是將它放在ApplicationController中。

這裏是你可以做什麼:

  1. 運行rails g controller static_pages

  2. 裏面你StaticPagesController.rb,複製和粘貼hello方法在裏面ApplicationController

  3. routes.rb更改爲root 'static_pages#hello

你應該有你想要的結果。

+0

railstutorial在第一章中做了這個,你可以製作這個一次性應用程序,只是爲了啓動和運行。其中一個更加不可思議的部分。當然,你不想在'ApplicationController'中這樣做,因爲你正在給應用程序中的所有控制器一個'hello'動作。 – max

1

我遵循同一個教程,我可以說,前兩章所涉及的材料起初相當複雜,如果你是新手編程。只有在你完成了整個教程之後,你纔會清楚這個路由選擇(或者這些章節中的其他細節)是如何實際工作的。 但是,由於這種佈線思路非常重要,即使您處於教程的早期階段,瞭解它的工作原理也不失爲一個好主意。


您可以創建在軌道路線的方式是,先指定一個合適的HTTP verbGETPOSTPATCHDELETE)用適當的路徑,控制器的名稱,後跟一個井號( #)和控制器中定義的動作的名稱。

這裏controller只是一個ruby類和action紅寶石方法。 (由於紅寶石on Rails的基本原理是"convention over configuration",重要的是要習慣的術語,如controlleractionrouting等)

當你說

get '/hello' => "application#hello" 

(是的,你可以代替to:)使用=>作爲takeriho表明,什麼情況是,一個GET請求類型/hello的URL(/是「根路徑」爲www.example.com/(注意/末))將被路由到ACTI或名爲hello的控制器或類中定義的名爲ApplicationController的類。

如果你看一下application_controller.rb,你會發現在類ApplicationController中定義了一個方法hello

class ApplicationController < ActionController::Base 
    ..... 

    def hello 
    render text: "Hello, world!" 
    end 
end 

現在,如果要指定一個根路徑,這是你原來的問題,你可以做root後跟一個控制器,一個哈希符號(#)的名稱,名稱一類。因此,代碼

root "application#hello" 

意味着對形式/,或root_path的URL的請求,因爲它就是所謂的在軌慣例,將被路由到指定的動作(或方法)hello在控制器定義(或一個類)名爲ApplicationController。你可以通過做

get '/' => "application#hello", as: :root 

(你可以命名通過添加as: :custom_name路由)實現相同的結果,但Rails是一個足夠聰明,知道這兩個是等價的。按照軌道慣例,任務變得更容易。


如果你是完全新的Rails的,我強烈建議你之前通過Ruby on Rails的教程,正如筆者建議,是不是一個完整的初學者要在Pragmatic Studio檢查出的Rails的課程。這種方法對我來說非常合適。 Pragmatic Studio提供的鐵路課程假設您對編程沒有預先的知識,並且以比我在這個答案中更清晰的方式解釋基礎知識。

編碼愉快:)

+0

感謝您的信息! @ gonzalo2000實際上幫助我解決了我提出的問題。我只需在重新啓動服務器之前進行保存。我在Visual Studio中工作過一些,並且從IDE啓動服務器不需要保存文件。現在顯然Rails Tutorial中使用的方法在IDE外部啓動,因此可以訪問保存的文件,而不像它們在IDE中那樣。我一定會考慮實用工作室 - 這聽起來很有幫助! – ncooper09