2010-11-19 28 views
1

Kullanıcıların egzersizlerini kaydetmelerine izin verdiğim bir uygulama oluşturdum. Kullanıcı, egzersizlerinin özel veya genel bir günlüğünü tutma özelliğine sahiptir ve 1 tamsayısını egzersiz.share sütununa geçiren bir onay kutusu alanı ile gösterilir. Özel günlük, current_user için filtreleme yaparak tüm çıktıları sınırladığım workouts_controller aracılığıyla görüntülenebilir.Mantığın görünümden çıkarılması ... named_scope ile yardım

workouts_controller.rb

@workouts = current_user.Workouts.all 

halka egzersiz ayrı community_controller ile gösterilir ve burada bu

community_controller gibi egzersiz

@workouts = Workouts.all 

ve çağrı ardından sonuçları filtreleme Aşağıdaki

ile görüntüleme

Best Bunu yapmanın tercih edilen yolu olmadığını söyleyebilirim ve şüpheliğim, '@shared_workouts' adlı yeni bir değişken oluşturabilmem için bir named_scope olmasını istiyorum. Bu, adlandırılmış kapsamları bilmediğimi, bu yüzden neyin doğru sözdizimini koyabileceği konusunda bazı yardımları kullanabileceğimi söyledi. Eğer raylar 2 kullanıyorsanız

+0

Rails sürümü nedir? –

cevap

1

şunları kullanın: Eğer raylar 3 kullanıyorsanız

class Workout < ActiveRecord::Base 
    named_scope :shared, :conditions => {:share => 1} 
end 

yerine bunu kullanın:

class Workout < ActiveRecord::Base 
    scope :shared, where(:share => 1) 
end 

Ardından topluluk denetleyicisi, sadece kullanabilirsiniz @workouts = Workouts.shared.all

1

Peter'in yukarıda belirttiği gibi, kullandığınız Ray sürümüne göre bir adlandırılmış_scope/kapsam kullanın. Ayrıca test için 1 değerini kullanmak istemezsiniz. Doğru kullanmak istersiniz (yani, geçişinizde boole türünü kullandıysanız).

Veritabanını değiştirirseniz, farklı bir şekilde depolanabilir (SQLite örneğin bir boolean türü vardır, mySQL küçük bir int kullanır ...) ve etkin kayıt sizin için yönetecektir. :)

class Workout < ActiveRecord::Base 
    named_scope :shared, :conditions => {:share => true} 
end 

Ya

class Workout < ActiveRecord::Base 
    scope :shared, where(:share => true) 
end 

Sonra named_scope erişmek için "Workouts.shared" kullanın.