2016-04-11 19 views
0

tanımlayın Şu anda bence bu var:genel değişken raylar

@categories.each do |category| 

Ve kod çoğaltma denetleyicisi her yöntemde @categories tanımlamanız gerekir.

def home 
    @categories = Category.where(:parent_id => '').order("id").each 
end 

def contacts 
    @categories = Category.where(:parent_id => '').order("id").each 
end 

Tekrardan nasıl kurtulurum?

cevap

1

Sorgular arasında sonuçların değişebileceğinden, sınıf veya genel değişkenleri tanımlamaya gerek yoktur.

def home 
    categories 
end 

def contacts 
    categories 
end 

def categories 
    @categories ||= Category.where(:parent_id => '').order("id").each 
end 

Ve daha modelinde scope tanımlamak için: Ayrı yöntem haline yinelenen bazı Memoization ekleyip çıkarmak herhalde denetleyici yönteminde categories yılında

class Category < ActiveRecord::Base 
    scope :categories_without_parent, -> { where(:parent_id => '') } 
end 

bakacağız gibi: Orada

def categories 
    @categories ||= Category.categories_without_parent 
end 
+0

sonuçların sorgular arasında değişebileceğinden, sınıf veya global değişkenleri tanımlamaya gerek yoktur - sonuç, que arasında sonuçlar değiştirilemezse ne olur? ries kategorileri neden bir kez eklenecek ve yıllarca aynı kalacak bir şey mi? – user2950593

İlgili konular