Ruby on rails Rails复杂的路由,更容易命名的路由助手
我有一条命名路线,如下所示:Ruby on rails Rails复杂的路由,更容易命名的路由助手,ruby-on-rails,routing,helper,Ruby On Rails,Routing,Helper,我有一条命名路线,如下所示: 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
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
这相当麻烦。我希望能够写作
question_path( :id => @question.id, :username => @question.user.username )
question_path(@question)
# or even
link_to 'Question', @question
并得到了预期的结果
这怎么可能?我假设我必须覆盖默认的帮助程序才能实现这一点。这就像您希望为用户/问题创建嵌套路由一样
map.resource :users do |user|
map.resources :question, :shallow => true
end
通过这种方式,您可以使用/users/1/questions访问用户问题,但您仍然可以访问特定问题的/questions/1。您可以使用
question\u路径(@question.user.username,@question)
也可以编写帮助器方法:
def user_question_path(question)
question_path(question.user.username, question)
end
使用
user\u question\u path(@question)
问题是,我的URL看起来像:username/:question\u id,我认为它不适用于此。您建议的解决方案是否会促进URL的生成?为什么需要这样的URL?这是客户的要求吗?如果不是,我强烈建议在rails中使用约定,在您的示例中,类似于/users/:user_id/questions/:idI希望使用这种格式,因为/users/:user_id/questions/:id太长了,我甚至在id后面显示标题slug,比如:/john/425发生了什么事