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