2012-04-15 6 views
2

私はスカイイーグルスネストセット宝石hereを使用しています。ネストセットレールアプリ、ヘルパーメソッドが私に必要なものを返さない

深度を2つにすることのみを許可していますが、深度をチェックする前にフィルタを保存していますが、ビューで制限することはできないようですそれを選択するオプション。私はここに示すように、ビューヘルパーを使用しています。

アプリ/ビュー/ _form.html.erb

<%= form_for(@category) do |f| %> 
    <p> 
    <%= f.label(:name) %> 
    <%= f.text_field :name %> 
    </p> 
    <p> 
    <%= f.label(:parent_id) %> 
    <%= f.select :parent_id, nested_set_options(Category.roots.to_a, @category) {|i, level| "#{'-' * level} #{i.name}" } %> 
    </p> 
    <p> 
    <%= f.submit("Submit") %> 
    </p> 
<% end %> 

私が主に興味がある行は、今のところそれは常に、ネストされたセットのすべてのレベルを返しますこれは

<%= f.select :parent_id, nested_set_options(Category.roots.to_a, @category) {|i, level| "#{'-' * level} #{i.name}" } %> 

されていますが、私は2つの深さしか許さないので、ルートノードを表示させたい。私はここで立ち往生しています。コードhereを見ると、ルートを含めるオプションしか表示されないため、これは本当です。私はラインに

<%= f.select :parent_id, nested_set_options(Category.roots.to_a, @category) {|i, level| "#{'-' * level} #{i.name}" if i.level < 1} %> 

をこれを実行しようとしている。しかし、このすべてはありませんが、2少ないしレベルを持っているオプションアウト空白になって、私はそれが実際にそれらすべてを返さないする必要があります。

nested_set_optionsに深みのあるカテゴリではなく、ルートのみを返すにはどうすればよいですか?事前に感謝します

答えて

2

私はここで間違ったヘルパーを使用していると思います。 nested_set_optionsも実際にすべての子孫を取得するように書かれていました。私は手でそれを追加することを提案します:

f.select :parent_id, Category.roots.collect {|c| [ c.name, c.id ] } 
+0

そうです、私は自分自身を考えていたはずです。私は明らかにnested_setに関心を持ち、明らかな解決策を見ていませんでした。本当にありがとう – ruevaughn

関連する問題