2010-06-02 145 views
0

我有類似下面的命名路線:Rails的複雜的路由,更容易命名路由助手

map.with_options :path_prefix => '/:username', :controller => 'questions' do |q| 
    q.question '/:id', :action => 'show', :conditions => { :method => :get } 
end 

我們產生一個特定的問題,我必須寫

question_path(:id => @question.id, :username => @question.user.username) 

的URL,這是非常繁瑣。我希望能寫

question_path(@question) 
# or even 
link_to 'Question', @question 

並且得到想要的結果。

這怎麼可能?我想我必須覆蓋默認的幫手來實現這一點。

回答

1

您可以使用question_path(@question.user.username, @question)

或者你可以寫helper方法:

def user_question_path(question) 
    question_path(question.user.username, question) 
    end 

並使用user_question_path(@question)

1

它接縫就像你想爲用戶/問題的嵌套路線。

map.resource :users do |user| 
    map.resources :question, :shallow => true 
end 

這種方式,你有/用戶/ 1 /問題獲得了用戶的問題,但你仍然可以訪問/問題/ 1到一個具體的問題。

+0

的事情是,我的網址是這樣的:用戶名/:question_id,我認爲它不爲此而工作。您建議的解決方案是否會促進URL生成? – fphilipe 2010-06-02 20:17:30

+1

爲什麼你需要這個網址?這是客戶要求嗎? 如果不是的話,我強烈建議在rails中使用慣例,在你的例子中,/ users /:user_id/questions /:id – robertokl 2010-06-02 20:42:07

+0

我需要這種格式,因爲/ users /:user_id/questions /:id太長了,我甚至會在id後面顯示標題段落,例如:'/ john/425-whats-going-on' – fphilipe 2010-06-03 07:09:57