2010-06-02 82 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