【问题标题】:RoR nested categoriesRoR 嵌套类别
【发布时间】:2011-02-05 08:01:52
【问题描述】:

伙计们! 我想知道如何制作像这样的网址:site.com/coding/ruby/rails/article-name 如您所见,有嵌套类别。我已经看过acts-as-tree 和很棒的嵌套集,但它使url 像site.com/rails/article-name。

所以,请帮帮我

【问题讨论】:

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


    【解决方案1】:

    如果您想使用资源丰富的控制器,请制作这样的路由:

    scope '(*categories)' do
      resources :articles
    end
    

    这将需要在您的网址末尾使用“文章”:/coding/ruby/rails/articles/article-name

    或者你可以使用这样的路由:

    match '(*categories)/:id' => 'articles#show', :as => :article
    

    这会让你做 article_path(:categories => 'coding/ruby/rails', :id => article.friendly_id)

    获取 /coding/ruby/rails/article-name

    如果您使用 awesome_nested_set,您可以通过执行类似的操作来生成类别字符串

    article.category.self_and_ancestors.join("/")
    

    【讨论】:

      【解决方案2】:

      您可以尝试使用Friendly-id

      【讨论】:

      • tnx,我已经尝试过这个 gem。主要问题是在 url(嵌套 url)中维护“面包屑”。我将 rails/1 转换为 rails/article-name 没有任何问题
      【解决方案3】:

      要进行此设置,请从执行“路由通配”的路由开始:

      match "*category" => "categories#show"

      match "categories/*category" => "categories#show"

      在您的控制器中,您将通过params 散列接收url 的所有部分。为了保持整洁,请在模型中定义搜索逻辑

      def show
        @category = Category.find_recursive(*params[:categories])
      end
      

      在您的模型中,定义一个查找类别的方法。我假设acts_as_tree 在您的模型中定义

      def self.find_recursive(*categories)
        children = roots
        last = nil
        categories.each do |category|
          return unless children
      
          last = children.find_by_permalink(category)
          children = last.children
        end
        last
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-10
        • 1970-01-01
        • 2011-03-02
        • 1970-01-01
        • 2021-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多