RoR嵌套类别

时间:2011-02-05 08:01:52

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

人们! 我想知道如何制作网址:site.com/coding/ruby/rails/article-name 如您所见,有嵌套类别。我已经看过act-as-tree和令人敬畏的嵌套集,但它会像site.com/rails/article-name那样制作网址。

所以,请帮帮我

3 个答案:

答案 0 :(得分:4)

如果您想使用资源丰富的控制器,请制作如下路线:

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("/")

答案 1 :(得分:0)

您可以尝试使用Friendly-id

答案 2 :(得分:0)

要进行此设置,您需要使用“路由通配”的路线:

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

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

在您的控制器中,您将通过params哈希接收网址的所有部分。为了保持清洁,请在模型中定义搜索逻辑

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