【问题标题】:'If' statement in routes路由中的“If”语句
【发布时间】:2012-11-12 20:01:13
【问题描述】:

我有一个名为“类别”的行的帖子模型,它存储带有类别的字符串。我想更改我的路线,如果我进入"blog" 类别,那么它将显示如下地址:mysite.com/blog/1 或者如果我的帖子类别为"portfolio",它将显示我的帖子地址,如mysite.com/portfolio/2 等。是否可以不制作另一个表格并在那里存储类别?我正在考虑一些路线if 声明,但目前无法弄清楚任何事情。任何帮助将不胜感激。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 rest routes categories


    【解决方案1】:

    你为什么不把它们都抓起来

    match ':category/:id' => 'posts#show'
    

    然后您可以通过控制器中params 哈希中的:category 值进行过滤。

    @post = Post.where category: params[:category], id: params[:id]
    

    【讨论】:

    • 我现在在尝试输入单个帖子的 show 视图时遇到 undefined method 'title' for []:ActiveRecord::Relation 错误。 (标题是帖子字段中的一个)
    • 顺便说一句。我还没有 index 视图 - 我现在只需要 show 视图,但不知道如何定义路由中的链接以保持当前类别(它们从 mysite.com/portfolio/ 更改为 mysite.com/posts/1 :/
    • 这可能与您代码中其他地方的某些内容有关。尝试将错误追溯到我要说的来源。错误消息可能显示了麻烦的行。
    • 这有点无意义,实际上与match '/portfolio/:id' => 'posts#show'相同
    • 查看命名路线的文档,应该可以解决您的问题
    【解决方案2】:

    我认为你可以这样做!

    CATEGORIES = %w[portfolio blog sites]
          CATEGORIES.each do |cat|
        get cat + '/:id', controller: 'post', action: 'show'
      end
    

    或者有范围:

       CATEGORIES = %w[portfolio blog sites]
          CATEGORIES.each do |cat|
             scope cat do
        get '/:id', controller: 'post', action: 'show'
         end
       end
    

    【讨论】:

    • 我不明白它会如何改变我的post#view 路由?
    • 您必须将操作更改为“查看”。您还可以使用 SOMEMODEL.all.each() 循环遍历一个表。
    猜你喜欢
    • 2018-04-19
    • 1970-01-01
    • 2021-08-20
    • 2017-08-23
    • 1970-01-01
    • 2020-03-24
    • 2013-02-15
    • 2011-12-01
    • 1970-01-01
    相关资源
    最近更新 更多