2

ここでは、Sky Eagles のネストされた set gem を使用しています

深さは 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 つの深さしか許可していないため、ルート ノードのみを表示したいと考えています。ここでコードを見ると、ルートを含めるオプションしか表示されないため、ここで立ち往生しています。これは真実であり、それで問題ありません。私はこれを行にしようとしました

<%= 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 が深さのあるカテゴリではなく、ルートのみを返すようにするにはどうすればよいでしょうか? 前もって感謝します

4

1 に答える 1

2

ここで間違ったヘルパーを使用していると思います。nested_set_options実際にすべての子孫も取得するように記述されています。手で追加することをお勧めします:

f.select :parent_id, Category.roots.collect {|c| [ c.name, c.id ] }
于 2012-04-15T10:14:46.210 に答える