2016-01-12 89 views
0

我建立一個博客,我想我的類別有漂亮的URL就像 blog/musicblog/art如何用範圍使用friendly_id製作漂亮的網址?

到目前爲止,我已經成功地使它們看起來像這樣

/blog?category=music

class Article < ActiveRecord::Base 
    belongs_to :category 

    extend FriendlyId 
    friendly_id :title, use: :slugged 

    scope :by_category, -> (slug) { joins(:category).where('categories.slug = ?', slug) if slug } 
end 

-

class Category < ActiveRecord::Base 
    has_many :articles 

    extend FriendlyId 
    friendly_id :name, use: [:slugged, :finders] 
end 

視圖

= active_link_to category.name, articles_path(category: category.slug), remote: true, 
    class_active: 'active', class_inactive: 'inactive', wrap_tag: :dd, active: /#{Regexp.escape(category=category.slug)}/ 

控制器

Article.by_category(params[:category]) 
+0

正如我所看到的,你有開銷。爲什麼你使用範圍,當你可以像這樣'Category.find(params [:category])。articles'獲取文章? – axvm

回答

1

需要friendly_id只是基於類的標題就可以創建蛞蝓。如果您想讓子彈在類別範圍內獨一無二,您可以使用特殊的friendly_id module來解決此問題。

於好嵌套的網址,你可以做這樣的事情在你的路線:在你的看法

class ArticlesController < ApplicationController 
    def index 
    @category = Category.friendly.find(params[:category]) 
    @articles = @category.articles 
    respond_to do |format| 
     # and so on... 
    end 
    end 
end 

而且是這樣的:

get 'blog/:category', to: 'articles#index', as: "category" 

像這樣的事情在你的文章控制器:

link_to category.title, category_url(category) 
1

你不需要friendly_id這個任務

添加這樣的事情你的路由:

get 'blog/:category', to: 'articles#index', as: "category" 

和然後

link_to category, category_path(category) 

http://guides.rubyonrails.org/routing.html

+0

那麼,這裏需要'friendly_id'來創建基於類別標題的slug ;-) – kimrgrey