2012-08-06 55 views
1

現在我發現在rails中路由和URL構造是半混亂的。在顯示/過濾數據時,我目前已經匹配以下用於傳入的標記。在Rails中管理URL參數

match '/posts/standard/' => 'posts#standard' 
match '/posts/standard/:tags' => 'posts#standard', :as => :post_tag 
match '/posts/standard/:tags' => redirect { |params| "/posts/standard/#{params[:tags].gsub(' ', '+')}" }, :tags => /.+/ 

不過,現在我想添加一個「技能」的參數,只需要一個狀態;然而,我很想知道如何在我的URL中構造這個。我只是不能有...

match '/posts/standard/:tags/:skill' => 'posts#standard', as => post_tag, as: => post_skill 

所以,我的話非常此時迷茫,不導軌爲構建URL的任何類型的幫助?

回答

3

一種方式是隻保留你的主要途徑

match '/posts/standard/:tags' => 'posts#standard', :as => :post_tag 

及處理額外的網址參數爲PARAMS。 URL可能看起來像:

/posts/standard/1?skill=something 

,這是很容易注入額外的參數,可以如

link_to post_tag_path(:skill=> 'something') 

,然後你的控制器會做

def standard 
    if params[:skill] == 'something' 
    ... 
    else 
    ... 
    end 
end 

而且,不可以肯定的是,你的路線'match'/ posts/standard /'=>'posts#standard'中的第一行可能會捕獲所有路線,因爲有匹配。如果是這種情況,只需將其移至第一行之後。