【问题标题】:Rails Routing: How to route to a specific controller/action/id?Rails 路由:如何路由到特定的控制器/动作/ID?
【发布时间】:2013-08-30 20:15:18
【问题描述】:

我认为这应该是一个简单的问题。我想路由表单的 URL:

http://mywebsite.com/my_special_tag 

到具有特定 id 的特定控制器/动作对,例如

http://mywebsite.com/user/post/13 

(其中 13 是我要传递给控制器​​/动作的 id)。

还要注意,我不想重定向,只想渲染。

在 Rails 3 中是否有一种简单的方法可以做到这一点?

谢谢!

【问题讨论】:

  • 这是什么状态?你找到解决这个问题的方法了吗?如果是这样,如果您发布问题的答案将会很有帮助。

标签: ruby-on-rails ruby-on-rails-3 rails-routing


【解决方案1】:

假设您明确知道要渲染到哪个 URL,您可以显式匹配路由中的目标:

# config/routes.rb
match 'my_special_tag' => 'user#post', :defaults => {:id => 13}

请注意,这必然要求您在 UserController 中具有 post 操作(请注意,名称是单数,因为它们位于您想要的路径中)。

【讨论】:

  • 我试过了,还是不行。给我一个错误“未初始化的常量用户”。这是为什么呢?
  • 您能否验证您的路径确实是user/post/13,而不是users/posts/13(或类似的迭代)?
  • 还是不行。但这是做了什么:get 'my_special_tag', :controller => 'user', :action => 'post', :id => '13' 不知道有什么区别。
【解决方案2】:

您只需要这样的表格:

标签表:

id | post_id | tag
-------------------
1  |    13   | my_special_tag

然后你需要一个before_filter,它会获取该标签并检查数据库中的 post_id。

您还需要一个看起来像这样的通配符路由:Rails 3.1 - in routes.rb, using the wildcard, match '*' is not catching any routes

从这个开始,然后在您有更具体的问题时告诉我们,我们可以为您提供更好的帮助。

【讨论】:

    【解决方案3】:

    如果你检查你的路由,如果你正确定义了嵌套路由,你应该得到用户发布路由的语法。

    要为路由设置别名,您可以为特定匹配定义一个特定的 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 2018-02-21
      • 1970-01-01
      • 2012-06-19
      • 2012-08-01
      • 1970-01-01
      • 2014-08-26
      相关资源
      最近更新 更多