2011-06-02 22 views
6

yerine bir dizi döndürür ve OmniAuth railscasts numaralı telefonu takip ediyorum ve aynısını tren istasyonunda gösterildiği gibi devise + twitter yerine authlogic + facebook ile uygulamaya çalışıyorum.has_many, ActiveRecord sınıfı

Belki has_many benim anlayış hala iyi değil ama Railscasts içinde Ryan sahiptir following code[] nasıl bir dizi üzerinde find_or_create_by_provider_and_uid çağırabilir dizisi döndürür current_user.authentications benim uygulamasında

def create 
    auth = request.env["rack.auth"] 
    current_user.authentications.find_or_create_by_provider_and_uid(auth['provider'], auth['uid']) 
    flash[:notice] = "Authentication successful." 
    redirect_to authentications_url 
    end 

AuthenticationsController yılında?

Uygulamam yanlış mı? has_many bir dizi döndürmek için değil mi?

find_or_create_by_provider_and_uid numarasını nil nesnesinde aradığım hata. Kullanıcının herhangi bir kimlik doğrulaması olmadığından, iyi bir şekilde sıfırdır.

+0

Eğer Raylar 3 kullandığınız ya da Raylar önceki bir sürümünü kullandığınızdan emin misiniz? –

+0

raylar hakkında pozitiftir 3. dün gece bu problemi yaşadım, düşündüm ki burada tekrar evden çıkmadan önce burayı soracağım. Belki kaynağımda bir sorun var. ama 'has_many' diziyi geri getirmemeli mi? – Omnipresent

+0

Bana kodladığınız şeyin çalışması gerektiği anlaşılıyor. Kimlik doğrulama ilişkisini kendi işlevinizle (örneğin Kullanıcı sınıfında veya ilgili bir modülde) geçersiz kılmadığınızı doğruladınız mı? Daha fazla kod görmeden bu gerçekten düşünebileceğim tek şey. –

cevap

5

dizisi aslında tüm yöntem has_many birlikte durumunda bir dizi dahili nesne, çağrıları delegelerin AssociationProxy örneği, (aynı zamanda this question bakınız). Bu, find_or_create_by_provider_and_uid gibi sihir yöntemlerinin yanı sıra kapsamları vb. Gibi güzel yöntemleri çağırmanız gerektiği anlamına gelir. Ben de benzer bir sorun üzerinde tökezledi çünkü

Bu soruyu bulundu: öncelikle normal ActiveRecord::Relation alabilirsiniz

post.comments.klass # => NoMethodError 

Ama relation arayarak: nedense modeli sınıfını öğrenmek için ActiveRecord::Relation#klass arayamadım örnek:

post.comments.relation.klass # => Comment 
İlgili konular