2015-02-11 81 views
0

我是新手,在Ruby on Rails上理解鏈接路徑時遇到了一些問題。假設我已經在app/views/jobs/info.html.erb中說了一個頁面,並且我想從我的index.html.erb鏈接到該頁面,該鏈接位於同一個文件夾中,那麼鏈接路徑是什麼?鏈接到特定頁面的路徑 - Ruby on Rails

我有另一個鏈接路徑我index.html.erb裏面new.html.erb這是如下:

<%= link_to "Add a Position", new_job_path %> 

,但我如果我想做一個鏈接路徑info.html.erb我不明白我放的是什麼,而不是'new_job_path'?

如果有人能幫助我,我會非常感激。

回答

3

您實際上無法「建立到info.html.erb的鏈接路徑」。

鏈接指稱爲「資源」的抽象事物。在Rails中,資源最終是對給定控制器的特定操作。在config/routes.rb中指定的路由將URL路徑轉換爲控制器上的操作。

如果運行rake routes,你會看到的輸出看起來是這樣的:

Prefix Verb URI Pattern    Controller#Action 
    jobs GET /jobs(.:format)   jobs#index 
     POST /jobs(.:format)   jobs#create 
new_job GET /jobs/new(.:format)  jobs#new 
edit_job GET /jobs/:id/edit(.:format) jobs#edit 
    job GET /jobs/:id(.:format)  jobs#show 
     PATCH /jobs/:id(.:format)  jobs#update 
     PUT /jobs/:id(.:format)  jobs#update 
     DELETE /jobs/:id(.:format)  jobs#destroy 

它列出了所有你的應用程序中定義的路線。最右邊的列是正在運行的操作。 最左邊的列是您通常在視圖中調用link_to時使用的列。

因此,要回答你的問題,你的info.html.erb文件是在「上崗」控制器提供的視圖。

如果認爲不需要從數據庫或其他「工作」做的任何信息,則默認情況下,調用控制器上的行動「信息」,將剛剛渲染視圖 - 你不需要修改控制器。 (它會爲任何動作執行此操作,而不僅僅是「信息」。如果視圖未定義,則會生成404錯誤。)

因此,您需要添加一個映射到您的操作的路線。如果你看看config/routes.rb,你會看到一行說resources :jobs。如果您更改到:

resources :jobs do 
    collection do 
    get :info 
    end 
end 

您可以重新運行rake routes命令,你會看到一個新行添加到輸出:

Prefix Verb URI Pattern    Controller#Action 
info_jobs GET /jobs/info(.:format)  posts#info 

這是指向正確的行動路線,你可以通過編寫<%= link_to 'Info', info_jobs_path %>在視圖中鏈接到它。我通過「前綴」列獲得了該值,並添加了_path,它告訴它爲該資源生成一個相對URI。如果我需要一個絕對URI(通常在郵件程序中需要),那麼我會使用info_jobs_url

您還可以通過其他方式指定路線,具體取決於您可能需要的其他信息 - 請查看Rails生成的config/routes.rb中的註釋以瞭解詳細信息。

+0

Hi Scott,感謝您的深入解答,快速的問題,如果我的routes.rb文件看起來像這樣 - Rails.application.routes.draw do get 「工作/信息」 資源:工作 根「的工作#指數」 結束 - 然後我在哪裏把你說的話添加到routes.rb中? – user2498890 2015-02-12 10:26:57

+0

解決了它,非常感謝您的幫助! – user2498890 2015-02-12 11:33:47

2

一種方法是在你的控制器中添加一個動作,在你config/routes.rb

在JobsController

def info 
    #initialize instance variables that you would use in jobs/info.html.erb 
end 

的config/routes.rb中

get 'jobs/info', :to => "jobs/info", :as => job_info 

添加自定義路線現在您index.html.erb

<%= link_to "Job Info", job_info_path%> 
+0

因此,我已經把routes.rb文件中的'jobs/info',:as =>「jobs/info」,:as => job_info和<%link_to「Job Info」,job_info_path%> index.html.erb - def info - end在哪裏?我在裏面放什麼? – user2498890 2015-02-11 19:03:58

+0

'def info'會進入你的工作控制器。你放入什麼取決於你想在'info.html.erb'中使用什麼。如果你不想使用任何可用的實例,請將方法留空 – usha 2015-02-11 19:42:42