2013-05-16 16 views
126

Rails 4'te aşağıdaki işlemlerin nasıl yapıldığını merak ediyorum veya sadece Rails 3 yaklaşımını bir argüman kullanarak 4 ile yaptığım gibi 4 ile aynı şekilde iletebiliyorum.kapsamları?

oldukça 3 Rails için yeni ve çalışan Raylar 4. Burada

bazı örnekler üzerinden çalışmaya çalışıyorum 3 kod benim Raylar geçerli:

class Person < ActiveRecord::Base 
    scope :find_lazy, lambda {|id| where(:id => id)} 
end 

# In console I can call 
Person.find_lazy(1) 

Yani 4 yönlü kullanımı Raylar bu takdirde -}> { Bu bir lambda, değil mi? scope :all_lazy, -> { select("*") } Bir argümana ihtiyacım olsaydı ne olurdu? Birkaç farklı fikri denedim ve -> {} kullanırken konsoldaki argüman hatalarını alıyorum.

+3

Bu Ruby değil Raylar tarzıdır. –

cevap

271

Ben

scope :find_lazy, -> (id) { where(:id => id) } 
+0

Bu işe yarıyor! Teşekkürler! Bana – kaplan

+0

Works sayesinde –

+2

[destekleyici belgeler] (http://guides.rubyonrails.org/active_record_querying.html#scopes), özellikle bölüm 14.1. > (Id) - find_lazy: – Dennis

10

Yakut ya lambda eski tarz kaldırılmış henüz olması gerektiğini düşünüyorum, bu yüzden elbette bunun için gitmek kullanarak daha rahat hissetmiyorsanız.

I do not şahsen stabby lamda en kendimi sözdizimi ama onlara alışmak için zarar vermez, böylece en sonunda onlar muhtemelen norm haline gelecek gibi.

+5

ben sözdizimi gibi ama ok ve fonksiyon gövdesi arasında argümanları yerleştirmek için düz yanlış geliyor, "(id) -> {nerede ...}" olsaydı, bu çok daha çekici olurdu (ve ne matematik bilgim ne de coffeescript sözdiziminden kopar). Sonunda "->" sonuçlara değer eşleme gibi bir şey söylüyor. – hurikhan77

+0

Rails 4.2'deki eski stili kullanmanın veritabanından yanlış boole değerleri döndürdüğü bir duruma rastladım. Resmi olarak kullanımdan kaldırılmayabilir, ancak güncel sözdizimini kullanmak sorunu çözdü. –

6

Raylar 4, yapabileceğiniz:

:id => id 

Daha iyi karma:

id: id 
1

desteklemek için dernekler:

scope :find_lazy, -> (object) { where(object_id: object.id) } 
eski yakut oldu
scope :find_lazy, -> (id) { where(id: id) } 

İlgili konular