Ruby on rails 在Rails 3.1中,如何将URL的格式设置为username/controller/:id?
我希望它与Twitter处理推文URL的方式类似 例如,现在我的URL是这样的: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
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
删除操作会是什么样子?在我执行此操作之前: