Ruby on rails 在Rails 3.1中,如何将URL的格式设置为username/controller/:id?

Ruby on rails 在Rails 3.1中,如何将URL的格式设置为username/controller/:id?,ruby-on-rails,ruby-on-rails-3,routing,rails-routing,Ruby On Rails,Ruby On Rails 3,Routing,Rails Routing,我希望它与Twitter处理推文URL的方式类似 例如,现在我的URL是这样的:mydomain.com/feedbacks/1/,其中feedbacks是控制器的名称 我希望它看起来像:mydomain.com/username/feedbacks/1/,它类似于Twitter的:Twitter.com/username/status/:id/ 我的routes.rb如下所示: resources :users do resources :feedbacks end fe

我希望它与Twitter处理推文URL的方式类似

例如,现在我的URL是这样的:
mydomain.com/feedbacks/1/
,其中
feedbacks
是控制器的名称

我希望它看起来像:
mydomain.com/username/feedbacks/1/
,它类似于Twitter的:
Twitter.com/username/status/:id/

我的
routes.rb
如下所示:

  resources :users do
      resources :feedbacks
  end
feedbacks_url(:username => 'foo')
当我有这样的URL时,它给我的URL是
mydomain.com/users/1/feedbacks
,但我想要URL中的实际用户名

我怎么知道

谢谢

编辑1:如果你要为这个问题添加另一个答案,请确保它在已经给出的答案中回答了我的评论/问题。否则它将是多余的

scope ":username" do
  resources :feedbacks
end
从:

这将为您提供URL,如/bob/posts/1,并允许 您需要在中将路径的用户名部分引用为params[:username] 控制器、帮助程序和视图


更新:

我已经测试并确认了paozac报告的准确性。我会澄清一下

假设您有一个
@feedback
对象,其
id
12
,并且关联用户的
用户名为
fooouser
。如果要为该
@feedback
对象生成编辑页面的URL,可以执行以下操作:

edit_feedback_url(:username => @feedback.user.username, :id => @feedback)
输出将是
“/fooouser/feedbacks/12/edit”

此外,正如nathanvda在评论中指出的,您可以选择将与相应的动态段匹配的。在这种情况下,必须首先传递用户名,然后传递反馈id,即:

edit_feedback_url(@feedback.user.username, @feedback)
另外,如果您需要从控制器处理参数的帮助,我建议您创建一个特定于此的新问题

从:

这将为您提供URL,如/bob/posts/1,并允许 您需要在中将路径的用户名部分引用为params[:username] 控制器、帮助程序和视图


更新:

我已经测试并确认了paozac报告的准确性。我会澄清一下

假设您有一个
@feedback
对象,其
id
12
,并且关联用户的
用户名为
fooouser
。如果要为该
@feedback
对象生成编辑页面的URL,可以执行以下操作:

edit_feedback_url(:username => @feedback.user.username, :id => @feedback)
输出将是
“/fooouser/feedbacks/12/edit”

此外,正如nathanvda在评论中指出的,您可以选择将与相应的动态段匹配的。在这种情况下,必须首先传递用户名,然后传递反馈id,即:

edit_feedback_url(@feedback.user.username, @feedback)

另外,如果您需要从控制器处理参数的帮助,我建议您创建一个新的问题来解决这个问题。

一旦您定义了范围,如dwhalen所说,您可以生成如下url:

  resources :users do
      resources :feedbacks
  end
feedbacks_url(:username => 'foo')
得到

http://www.example.com/foo/feedbacks
http://www.example.com/foo/feedbacks/1/edit

得到

http://www.example.com/foo/feedbacks
http://www.example.com/foo/feedbacks/1/edit

定义了dwhalen所说的范围后,您可以生成如下url:

  resources :users do
      resources :feedbacks
  end
feedbacks_url(:username => 'foo')
得到

http://www.example.com/foo/feedbacks
http://www.example.com/foo/feedbacks/1/edit

得到

http://www.example.com/foo/feedbacks
http://www.example.com/foo/feedbacks/1/edit

它是有效的,但最后一件事是,我如何链接到它?我尝试了
feedbacks\u path(feedback)
,它生成了常规的
domain.com/:id/feedbacks
URL。另外,在我有路径的索引页上,如果我有
edit\u feedback\u path(feedback)
它会给我这个路由错误:
没有路由匹配{:action=>“edit”,:controller=>“feedbacks”,
,但如果我将
编辑反馈路径
复数化,我将得到此错误
未定义的方法“编辑反馈路径”
。我做错了什么?从命令行运行“rake routes”以获取应用程序的所有路径。以下是
rake routes
输出:。如果指定的路由(例如,
edit_feedback_path
等)没有处理路由前缀的方法,您可以自己编写它们:
“{@user.username}/feedbacks/new
或将其提取到以用户或用户名作为输入的帮助器方法中。nathanvda感谢!有序参数与相应的动态段相关联是有意义的。并且
\u url
\u路径
是可选的(默认为
\u url
)。对不起,应该是
feedback\u url(:username=>feedback.user.username,:id=>feedbacks)
它可以工作,但最后一件事是,我如何链接到它?我尝试了
feedbacks\u路径(feedback)
,它生成了常规的
domain.com/:id/feedbacks
URL。另外,在我有路径的索引页上,如果我有
编辑反馈路径(feedback)
它给我这个路由错误:
没有路由匹配{:action=>“edit”,:controller=>“feedbacks”“,
,但是如果我对
编辑反馈路径
进行复数,我会得到此错误
未定义的方法“编辑反馈路径”
。我做错了什么?从命令行运行“rake routes”以获取应用程序的所有路由。以下是
rake路由
输出:。如果指定路由(例如,
edit_feedback_path
等)没有处理路由前缀的方法,您可以自己编写它们:
“{@user.username}/feedbacks/new
或将其提取到以用户或用户名作为输入的帮助器方法中。nathanvda感谢!有序参数与相应的动态段相关联是有意义的。并且
\u url
\u路径
是可选的(默认为
\u url
)。对不起,应该是
feedback\u url(:username=>feedback.user.username,:id=>feedbacks)
删除操作会是什么样子?在我之前:
,但现在这给了我一个错误:
(没有路径匹配{:action=>“show”,:controller=>“feedbacks”,:username=>#})
你可以使用
反馈url(:username=>“foo”:id=>“feedbacks.id),:method=>:delete
删除操作会是什么样子?在我执行此操作之前: