Rails友好ID自​​定义路由

时间:2014-08-27 16:50:55

标签: ruby-on-rails friendly-id

我试图让我的路线像这样工作:

/articles/<category slug>/<article slug>

我正在使用:

ruby '2.1.2'
gem 'rails', '4.1.4'
gem "friendly_id", "~> 5.0.1"

我有一个包含很多文章的类别

网址结构现在是:

/类别/

/物品/

因为我的routes.rb文件如下所示:

resources :categories
resources :articles

我的article.rb文件:

class Article < ActiveRecord::Base
    belongs_to :category

    extend FriendlyId 
    friendly_id :slug_candidates, use: [:slugged, :globalize]

    def slug_candidates
      [
        :name
      ]
    end
end

这是我的category.rb:

class Category < ActiveRecord::Base
        has_many :articles

        extend FriendlyId 
        friendly_id :slug_candidates, use: [:slugged, :globalize]

        # Try building a slug based on the following fields in
        # increasing order of specificity.
        def slug_candidates
          [
            :name
          ]
        end
end

如果我做这样的嵌套路线:

resources :categories do
   resources :articles
end

然后结构变为 /categories/<category slug>/articles/<article slug>

2 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

resources :categories do
  get ':article_slug', to: 'articles#show' # => /categories/:category_id/:article_slug
end

甚至:

resources :categories do
  resources :articles, path: ''
end

但要小心,因为这会在/categories/:category_slug/.../之后发现任何事情。我不知道newedit等常规路线的行为是什么。

答案 1 :(得分:0)

这正是我想要的。它扩展了mbillard的答案:

  get "/articles", to: "articles#index"
  resources :categories, path: 'articles' do
    resources :articles, path: '', only: [:show]
  end
  resources :articles, only: [:index, :new, :edit, :create, :update, :destroy]