mar*_*ion 1 routing ruby-on-rails rails-routing ruby-on-rails-3
我希望它类似于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
Run Code Online (Sandbox Code Playgroud)
当我这样的时候,它会给我URL mydomain.com/users/1/feedbacks
,但我想要URL中的实际用户名.
我怎么做到的?
谢谢.
编辑1:如果您要为此问题添加另一个答案,请确保它针对已给出的答案解决我的意见/问题.否则它将是多余的.
scope ":username" do
resources :feedbacks
end
Run Code Online (Sandbox Code Playgroud)
来自文档:
这将为您提供诸如/ bob/posts/1之类的URL,并允许您在控制器,帮助程序和视图中引用路径的用户名部分作为params [:username].
更新:
我已经测试并确认了paozac 答案的准确性.我会稍微澄清一下.
假设你有一个@feedback
与对象id
的12
,以及相关的用户有一个username
的foouser
.如果要生成该@feedback
对象的编辑页面的URL ,可以执行以下操作:
edit_feedback_url(:username => @feedback.user.username, :id => @feedback)
Run Code Online (Sandbox Code Playgroud)
输出将是"/foouser/feedbacks/12/edit"
.
# A URL to the show action could be generated like so:
feedback_url(:username => feedback.user.username, :id => feedback)
#=> "/foouser/feedbacks/12"
# New
new_feedback_url(:username => current_user.username)
#=> "/foouser/feedbacks/new"
Run Code Online (Sandbox Code Playgroud)
此外,正如nathanvda在注释中所指出的,您可以传递与相应动态段匹配的有序参数.在这种情况下,必须首先传递用户名,并且应该传递反馈ID,即:
edit_feedback_url(@feedback.user.username, @feedback)
Run Code Online (Sandbox Code Playgroud)
此外,如果您需要帮助处理来自控制器的参数,我建议创建一个特定于此的新问题.
归档时间: |
|
查看次数: |
263 次 |
最近记录: |