7

私のモデルクラスは次のとおりです。

class Category < ActiveRecord::Base
  acts_as_nested_set
  has_many :children, :foreign_key => "parent_id", :class_name => 'Category'
  belongs_to :parent, :foreign_key => "parent_id", :class_name => 'Category' 


  def to_param
    slug
  end
end

このような再帰的なルートを持つことは可能ですか: /root_category_slug/child_category_slug/child_of_a_child_category_slug...そして1つ

助けてくれてありがとう:)

4

4 に答える 4

4

通常のルートとルートグロブでそれを行うことができるので、たとえば、

map.connect 'categories/*slugs', :controller => 'categories', :action => 'show_deeply_nested_category'

次に、コントローラーで

def show_deeply_nested_category
  do_something = params[:slugs]  # contains an array of the path segments
end

ただし、複数レベルの深さのネストされたリソースルーティングは推奨されないことに注意してください。

于 2010-04-04T02:56:54.300 に答える
2

私はそれを疑っています、そしてそれは良い考えではありません。Railsルートマッピングコードは、無限のルート文字列を動的にエンコードおよびデコードしようとする必要がなく、十分に複雑です。

于 2010-04-04T02:12:59.173 に答える
1

Railsルーティングで制約を使用できます。例えば:

match '*id', :to => 'categories#show', :constraints => TaxonConstraint.new

class TaxonConstraint
  def matches?(request)
    path = request.path.slice(1..(request.path.length-1)
    path = path.split('/')
    return false if path.length != path.uniq.length
    return true if Category.check(path.last).first
    false
  end
end

クラスはパスを「/」で分割し、dbでdbの最後の要素をチェックします。見つからない場合は、ルートをスキップします。誰かがそれをよりよく解決する方法を知っているなら、聞いてうれしいでしょう。

于 2011-07-29T08:13:17.720 に答える
0

それは簡単ではなく(読んでください:私はそれを行う方法がわかりません)、それはお勧めできません。10個のカテゴリがある場合、URLをにしたくないと想像してください/categorya/categoryb/categoryc/categoryd/categorye/categoryf/categoryg/categoryh/categoryi/categoryj

おそらく、最大レベル3で、URLを汚染することなく、必要なパワーを得ることができますか?

于 2010-04-01T10:46:50.450 に答える