【发布时间】:2011-02-05 08:01:52
【问题描述】:
伙计们! 我想知道如何制作像这样的网址:site.com/coding/ruby/rails/article-name 如您所见,有嵌套类别。我已经看过acts-as-tree 和很棒的嵌套集,但它使url 像site.com/rails/article-name。
所以,请帮帮我
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 nested url-routing
伙计们! 我想知道如何制作像这样的网址:site.com/coding/ruby/rails/article-name 如您所见,有嵌套类别。我已经看过acts-as-tree 和很棒的嵌套集,但它使url 像site.com/rails/article-name。
所以,请帮帮我
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 nested url-routing
如果您想使用资源丰富的控制器,请制作这样的路由:
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("/")
【讨论】:
您可以尝试使用Friendly-id。
【讨论】:
要进行此设置,请从执行“路由通配”的路由开始:
match "*category" => "categories#show"
或
match "categories/*category" => "categories#show"
在您的控制器中,您将通过params 散列接收url 的所有部分。为了保持整洁,请在模型中定义搜索逻辑
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
【讨论】: