分類法が最も/すべてのページに表示され、その後、ちょうど行くしている場合、最も可能性の高いapplication_controller.rb
、共通のコントローラで
@brand_taxonomy = Taxonomy.where(:name => 'Brand').first
を設定することがはるかに良いと思います:
<h3 class='taxonomy-root'><%= t(:shop_by_taxonomy, :taxonomy => @brand_taxonomy.name.singularize) %></h3>
<%= taxons_tree(@brand_taxonomy.root, @taxon, Spree::Config[:max_level_in_taxons_menu] || 1) %>
ループと条件付きを完全に排除します。
def my_taxons_tree(root_taxon, current_taxon, max_level = 1)
return '' if max_level < 1 || root_taxon.children.empty?
content_tag :ul, :class => 'taxons-list' do
root_taxon.children.except(:order).order(:name).map do |taxon|
css_class = (current_taxon && current_taxon.self_and_ancestors.include?(taxon)) ? 'current' : nil
content_tag :li, :class => css_class do
link_to(taxon.name, seo_url(taxon)) +
taxons_tree(taxon, current_taxon, max_level - 1)
end
end.join("\n").html_safe
end
end
:名前が注文した子供を得るために、あなたはヘルパーを書き換える必要があるだろうので
残念ながらtaxons_tree
ヘルパーは直接としてapplication_helpers.rb
で言う、トップレベルの分類の子供たちを呼び出し
キーの変更は、.except(:order).order(:name)
をヘルパーの子検索に追加することです。
最終ビューのコードは次のようになります。
<h3 class='taxonomy-root'><%= t(:shop_by_taxonomy, :taxonomy => @brand_taxonomy.name.singularize) %></h3>
<%= my_taxons_tree(@brand_taxonomy.root, @taxon, Spree::Config[:max_level_in_taxons_menu] || 1) %>
とapplication_controller.rb
であなたが追加したい:私はシュプレープロジェクト自分自身でこれを実装していない
before_filter :set_brand_taxonomy
def set_brand_taxonomy
@brand_taxonomy = Taxonomy.where(:name => 'Brand').first
end
を、そして、それはあなた次第Rails 3.0.3以降のバージョンを使用していますが、これは私が提案する基本的なアプローチです。
非常に詳細な回答ありがとうございます。そのままでは動作していないようです。未定義の変数に関するエラーのため、 'my_taxons_tree(brand_taxonomy.root')に' @ 'シンボルを追加しましたが、この行の' nil:NilClass'の '未定義メソッド' root 'を取得します。 rb:http://pastie.org/3178498(これもエラーを出したので、h3行を削除しました) –
'@'が見つからないために修正されました。ごめんなさい: 'rails console' その後、 と入力します: 'Taxonomy.where(:名=>「ブランド」)?' ...それは何を返すん 「ブランド」という名前の親分類が存在しないようですね... – Cyberfox
また、?は、 'my_taxons_tree'ヘルパーメソッドを' application_controller.rb'に追加しました;代わりに 'app/helpers'にある' application_helper.rb'に入れることをお勧めしました。 ion_controllerの場合は、コントローラの先頭に 'helper_method:my_taxons_tree'を追加し、それをプライベートブロックに入れます(' my_taxons_tree'定義の前に 'private'を1行だけ置くだけです)。 Railsのように、 'app/helpers/application_helper.rb'に入れておくのが好きです。 – Cyberfox