0

我有一个命名路线,如下所示:

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

现在要生成一个特定问题的 URL,我必须写

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

这很麻烦。我希望能够写作

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

并得到想要的结果。

这怎么可能?我假设我必须覆盖默认助手来实现这一点。

4

2 回答 2

1

看起来你想要一个用户/问题的嵌套路由。

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

这样,您可以使用 /users/1/questions 访问用户问题,但您仍然可以访问 /questions/1 来访问特定问题。

于 2010-06-02T19:04:51.200 回答
1

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

或者你可以编写辅助方法:

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

并使用user_question_path(@question)

于 2010-06-02T21:27:09.970 回答