2012-11-12 24 views
1

我有一個名爲'category'的行的post模型,它存儲了具有類別的字符串。我想改變我的路線,如果我進入"blog"類別,那麼它將顯示如下地址:mysite.com/blog/1或者如果我的帖子類別是"portfolio"它會顯示我的帖子地址,如mysite.com/portfolio/2等。是否有可能不製作另一個表和存儲類別?我正在考慮一些路線if聲明,但目前無法弄清楚任何事情。任何幫助將不勝感激。'如果'路線中的語句

回答

1

我想你可以這樣做!

CATEGORIES = %w[portfolio blog sites] 
     CATEGORIES.each do |cat| 
    get cat + '/:id', controller: 'post', action: 'show' 
    end 

或是帶瞄準鏡:

CATEGORIES = %w[portfolio blog sites] 
     CATEGORIES.each do |cat| 
     scope cat do 
    get '/:id', controller: 'post', action: 'show' 
    end 
    end 
+0

我不明白它將如何改變我的'後#視圖'路線? – mrmnmly

+0

你必須改變行動到'視圖'。您也可以使用SOMEMODEL.all.each()來遍歷表。 – tritter

1

你爲什麼不只是趕上他們與

match ':category/:id' => 'posts#show' 

然後,你可以通過:category值在該params散列過濾器控制器。

@post = Post.where category: params[:category], id: params[:id] 
+0

當我嘗試進入單個帖子的「show」視圖時,我現在正在爲[]:ActiveRecord :: Relation'錯誤獲取'undefined method'標題'。 (標題是帖子字段中的一個) – mrmnmly

+0

btw。我沒有'index'視圖 - 我現在只需要'show'視圖,但不知道如何定義路徑中的鏈接以保留當前類別(它們正在從'mysite.com/portfolio /'更改爲'mysite.com/posts/1':/ – mrmnmly

+0

這可能與你的代碼中其他地方有關,試着追蹤錯誤的來源,我會說錯誤信息可能會顯示麻煩的線路 – edgerunner