Soru Kapsamdaki argümanları geçir


Birisi nasıl kullanılacağı hakkında bir örnek verebilir

scope

ve parametreler?

Örneğin:

class Permission < ActiveRecord::Base
  scope :default_permissions, :conditions => { :is_default => true }
end

Ben default_permissions döndüren bu kodu var ve belirli bir kullanıcı için varsayılan izinleri döndürmek için onu dönüştürmek istiyorum (user_id)

Teşekkürler


44
2017-07-22 09:40


Menşei




Cevaplar:


Yeni bir sözdizimi (ruby 1.9+), kullanıcıyı sağlamazsanız bile hataları önleyecek -

scope :default_permissions_for, ->(user = nil) { ... }

80
2017-09-28 15:53



çok yararlı bilgi. Yani, argüman nil olduğunda, blok çalışmazsa bu mu demek oluyor? Ruby bu şekilde davranıyor mu? - ahnbizcad
Hayır, sadece değer verilmediyse kullanıcının varsayılan değer sıfırını alacağı anlamına gelir. blok çalışacak, ancak user.nil olup olmadığını kontrol edebilirsiniz? - nurinur
Açıklama için teşekkürler. Heh, işte bu, benzetme mantığımın çığlık atmasına rağmen, "Bu sadece argüman olarak geçemez mi?" - ahnbizcad


Lambda kapsamları kullanın:

scope :default_permissions_for, lambda{|user| { :conditions => { :user_id => user.id, :is_default => true } }

Dikkatli olun çünkü bir istisna artacağını beklediğinde lambdaya bir parametre aktarılmıyor.


38
2017-07-22 09:45



Bu istisnayı kontrol cihazında nasıl yakalayacağımıza dair bir örnek göstermek mümkün mü? Yoksa gerekli değil mi? - glarkou
İstisna adı hakkında emin değilim, günlükleri kontrol edin ve sadece ExceptionClass => e kurtarma - keymone
Ruby 1.9'daki @keymone'a atıfta bulunduğunuz hataları önlemek için lambda parametresi için bir varsayılan ayarlayabilirsiniz. Yani lambda olur {| user = nil | {: koşullar ...... - Dorian