2016-05-12 9 views
2

特定のstate_taxonomiesを持つ製品のリストを反復するインデックスビューがあります。私はビュー内のクエリ要求を処理するロジックを得ることができましたが、私は<% Product.where(id: st.product_id).each do |tax| %>ロジックがビュー内に表示されないと仮定していますか?Ruby on Railsのビューからロジックを削除する

  1. このロジックはどこに置く必要がありますか?
  2. このメソッドを作成するにはどうすればよいですか?私はいくつかのルートを試しましたが、失敗しました。

製品インデックスビューユーザブートストラップNAV-の丸薬:

<div> 
    <% @state_taxonomies.each do |st| %> 
    <div class="tab-pane" id="<%= st.id %>"> 
     <% Product.where(id: st.product_id).each do |tax| %> 
     <%= link_to tax.title, tax %> 
     <% end %> 
    </div> 
    <% end %> 
</div> 

製品コントローラ:

def index 
    @products = Product.all.page params[:page] 
    @state_taxonomies = StateTaxonomy.all 
end 

注:製品has_manyの:state_taxonomiesとbelongs_toのstate_taxonomy:製品。

+0

ロジックはProductsコントローラに正確に記述する必要があります。 ** @ products = Porduct..all.page params [:page] **の代わりに、ビューレベルでこれを行うのではなく、ビューで必要なプロダクトを選択する必要があります。 –

+0

対応する「

」のない「
」を持っているため、質問が編集されました。 –

+0

可能であれば、答えがあなたを助けた場合は、私たちにポジションを与えてください。可能であれば、好きな答えを選んでください。これは、回答の質を向上させることによって、あなたを助けて、このサイトを助ける人を支援します。 –

答えて

0

お使いの製品のコントローラは、何かのようにする必要があります:これは@productsに格納します

def index 
    @state_taxonomies = StateTaxonomy.all 
    @products = Hash.new 
    @state_taxonomies.each |st| do 
    @products[st.id] == Product.where(id: st.product_id) 
    end 
end 

すべてのビューで必要とあなただけ書くことができます:

<% @state_taxonomies.each do |st| %> 
    <div class="tab-pane" id="<%= st.id %>"> 
    <% @products[st.id].each do |tax| %> 
     <%= link_to tax.title, tax %> 
    <% end %> 
    </div> 
<% end %> 
2

あなたは多くのをやっていますあなたのコントローラの最初の質問Product.all(あなたは結果を使用していないようです)とStateTaxonomy.all。しかし、より悪いのはあなたの意見であり、それぞれ@state_taxonomiesの場合はProduct.where(id: st.product_id)です。

n + 1問題とeager loadingを調べる必要があります。また、ビュー内でクエリを実行しないでください。コントローラ内で実行されます。あなたのビューで次に

@state_taxonomies = StateTaxonomy.all.includes(:product) 

必要なのは、あなたのコントローラでStateTaxonomyを照会する際の製品を含めることです 私は見ることができます」を実現します。編集

<% @state_taxonomies.each do |st| %> 
    <div class="tab-pane" id="<%= st.id %>"> 
    <% st.products.each do |tax| %> 
     <%= link_to tax.title, tax %> 
    <% end %> 
    </div> 
<% end %> 

このようにしてください。あなたのモデルでは、state_taxonomyは製品に属しているので、1つの製品のみを持つことができます。それがあなたが望むものなのか、それともエラーなのかは分かりません。

あなたはどちらかだけstate_taxonomyにつき1つの製品表示できます

<% @state_taxonomies.each do |st| %> 
    <div class="tab-pane" id="<%= st.id %>"> 
    <%= link_to st.product.title, st.product %> 
    </div> 
<% end %> 

するか、二つのモデルとの関係を変更する、多分あなたはhas_and_belongs_to_manyをしたいです。

+0

素晴らしい解決策。私よりも良い。 –

+0

あなたの提案では、私はこれらの結果を '初期化されていない定数StateTaxonomy :: Products'にしています。 – jgrant

+0

@jgrant少し速いと書いています。コントローラの行を編集しました。 – igwan

関連する問題