我认为这应该是一个简单的问题。我想路由表单的 URL:
http://mywebsite.com/my_special_tag
到具有特定 id 的特定控制器/动作对,例如
http://mywebsite.com/user/post/13
(其中 13 是我想传递给控制器/动作的 id)。
另请注意,我不想重定向,只想渲染。
在 Rails 3 中是否有一种简单的方法可以做到这一点?
谢谢!
我认为这应该是一个简单的问题。我想路由表单的 URL:
http://mywebsite.com/my_special_tag
到具有特定 id 的特定控制器/动作对,例如
http://mywebsite.com/user/post/13
(其中 13 是我想传递给控制器/动作的 id)。
另请注意,我不想重定向,只想渲染。
在 Rails 3 中是否有一种简单的方法可以做到这一点?
谢谢!
假设您明确知道要渲染到哪个 URL,您可以显式匹配路由中的目标:
# config/routes.rb
match 'my_special_tag' => 'user#post', :defaults => {:id => 13}
请注意,这必然要求您在 a 中有一个post
操作UserController
(请注意,名称是单数的,因为它们位于您想要的路径中)。
You simply need a table like this:
tags table:
id | post_id | tag
-------------------
1 | 13 | my_special_tag
And then you need a before_filter
, that takes that tag and checks the database for the post_id.
You'd also need a wildcard route that looks something like this: Rails 3.1 - in routes.rb, using the wildcard, match '*' is not catching any routes
Start with that and then let us know when you have more specific questions and we can help you better.
如果你检查你的路由,你应该得到用户发布路由的语法,如果你已经正确定义了嵌套路由。
要为路由设置别名,您可以为特定匹配定义特定 id,如下所示:
match '/special_tag' => 'posts#index', :defaults => { :id => '5' }
更新
澄清一下,上面的内容应该只用于你想为路由别名的几个特定页面。如果您想为每个用户发布页面提供更加用户友好的链接,我建议您使用https://github.com/norman/friendly_id之类的东西,它允许您拥有类似的路线
http://example.com/states/washington
代替:
http://example.com/states/4323454