2011-08-15 39 views
0

我最近爲我的項目控制器(projects_controller.rb)添加了一個新方法(稱爲「help」),並在views目錄中創建了一個「help.html.haml」。通過link_to函數鏈接到rails的方法

我添加了以下路線的routes.rb:

resources :users, :only => [:new, :create, :edit, :update, :help] 
resources :projects, :module => 'users' do 
    get :help, :on => :member, :as => :help 
end 

我的目標是創建一個單獨的視圖的鏈接(讓我們index.html.haml稱呼它),這將鏈接到幫助。 html.haml。注:目前我的路線設置了以下URL顯示幫助:http://localhost:3001/projects/id/help

不幸的是,我不知道怎麼寫的代碼鏈接到上面列出的幫助URL。截至目前我已經在index.html.haml以下代碼:

%li= link_to 'quick help', project_path(@project) 

但是這個代碼只需要我http://localhost:3001/projects/id。是否可以使用link_to函數將「/ help」添加到URL中,還是有更好的方法可以做到這一點?

我真誠地感謝任何幫助。非常感謝您的參與!

回答

1

讓我們來看看你定義的路線的組成部分:

get :help, :on => :member, :as => :help 
  • 第一個參數是:help,這是一個將被調用操作的名稱。
  • 第二部分是:on => :member,表示該操作的作用範圍在特定記錄上。所以,你將不得不傳遞一個id來調用它。
  • 第三部分:as => :help定義了可用於生成url的助手方法的名稱。這就是你要找的。

基本上,help_project_path(@project)會生成你需要的url。因此,該鏈接應該是這樣的:

%li= link_to 'quick help', help_project_path(@project) 

注意,你並不真正需要的:as => :help路徑,它應該是help默認。如果你想要一個不同的助手名字,通常會使用它。

我想指出的另一件事是,您並未創建「help.html.haml鏈接」,而是在projects控制器上創建了help操作的鏈接。如果必要,該操作可以在某處重定向,您不必呈現視圖。我只是這麼說的,因爲聽起來你對這件事還是有點新鮮感,對不起,如果我只是誤解了。

+1

安德魯,非常感謝你的伴侶!我很感激你花時間清楚地解釋一切。這是我真正喜歡的,你猜對了,我對ROR比較陌生,所以越詳細和解釋越好,我會繼續前進。非常感謝! –

0

幫助方法做什麼?它是每個項目的幫助方法,還是一般項目的幫助。您可以按如下創建路線:

match '/projects/help/:id' => 'projects#help', :via => :get 

爲:通過,你可以選擇一個REST方法即是GET,POST,PUT等,按您的要求。

如果您嘗試爲一般項目創建幫助頁面,這可能沒有用處。無論何時您的URL爲/projects/<>,Rails都會嘗試將其路由到項目顯示頁面,並嘗試使用<>作爲項目的ID。

您正在使用,以project_path(@project)將帶你到項目展示頁面對象@project的的link_to。

所以,最後,這是你應該做的。我建議你創建一個單獨的控制器,用於一般頁面。我說,你有一個控制器OtherController

match '/help', :controller => 'other', :action => 'help', :via => :get 

然後創建視圖的help.html.erb頁面。希望這對你有用。