2013-12-18 55 views
2

我想在我的網站上創建不錯的網址。 我有兩個資源:頁面和博客。Rails將併發永久鏈接路由回退到另一個控制器

對他們倆的,我定義的永久鏈接:

def to_param 
    permalink 
end 

我創建了routes.rb定製路線:

get ':id', to: 'pages#show', as: :page 
get ':id', to: 'blogs#show', as: :blog 

另外它工作正常。

但開啓在一起我得到這個行爲:

如果我進入mysite.com/blog_link(對於博客記錄中定義的永久鏈接)我得到這個錯誤 ActiveRecord::RecordNotFound in PagesController#show

我如何定義頁面退卻到下一個資源在routes.rb如果沒有找到記錄?

回答

-1

您有兩條相同的路線指向不同的資源。這是一個錯誤,因爲第二個資源永遠不會被調用。

您應該預先他們

get 'pages/:id', to: 'pages#show', as: :page 
get 'blogs/:id', to: 'blogs#show', as: :blog 

否則,第一條路線必須能夠處理請求,包括備用的兩個類型的邏輯。理論上,您可以將:id路徑路由到一箇中間控制器,該中間控制器首先嚐試獲取一個頁面,如果失敗,則會獲取該id。

但絕對不推薦,因爲ID可能會重疊。

另請注意,我們鼓勵您在Rails路由中使用資源。他們將爲您創造最常見的路線並處理路徑世代。

+0

我想要urls不要有前綴,這就是爲什麼我問。但是,使用中間控制器的想法對我很有好處。你能告訴我怎麼做嗎? – Evgeny

+0

另外我有'資源:網頁'和'資源:博客'。我的'get'被寫在上面以覆蓋使用永久鏈接的默認路徑。 – Evgeny

相關問題