我试图让我的路线像这样工作:
/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>
答案 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/.../
之后发现任何事情。我不知道new
和edit
等常规路线的行为是什么。
答案 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]