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