2016-05-12 76 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和state_taxonomy belongs_to的:產品。

+0

你的邏輯應該完全在Products控制器中。而不是** @products = Porduct..all.page params [:page] **您應該選擇您需要的視圖中的產品,而不是在視圖級別執行此操作。 –

+0

我編輯你的問題,因爲你有一個'

'沒有相應的'
'。 –

+0

如有可能,如果答案對您有幫助,請給我們一個職位。如果可能,甚至選擇一個最喜歡的答案。這有助於那些幫助你並通過提高答案質量來幫助本網站的人。 –

回答

0

你的產品控制器應該是這樣的:

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 

這將存儲在@products所有在您的視圖需要,你可以只寫:

<% @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。此外,絕不要在視圖中執行查詢,該查詢會在控制器中執行。

所有你需要的是,當你在你的控制器查詢StateTaxonomy包括產品:

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

然後在您的視圖:

<% @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屬於一個產品,所以它只能有一個產品。我不知道這是你想要的還是它是一個錯誤。

您可以只顯示每一個state_taxonomy產品:

<% @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