2011-04-04 13 views
28

Omniauth gemini kullanarak, sağlayıcıdan bağımsız olarak, başarılı girişler için tek bir rota geri çağırma tanımlamak zorundayım:Raylar: hemen çıkın ve çıkın

def auth_callback 

     auth_data = request.env['omniauth.auth'] 

     if auth_data.has_key('something') 
      process_one(auth_data) 
     else 
      process_two(auth_data) 
     end 

     # No view is available here 

end 


def process_one 
    # do something then render view for process_one 
    return 
end 

def process_two 
    # do something then render view for process_two 
    return 
end 

Denetleyicinin auth_callback yöntemine dönmesini nasıl engelleyebilir ve ilgili görünümü görüntülemeye çalışıyorum (var olmayan)? İşlem_one veya process_two yöntemleri geri döndükten sonra tedavi tamamlanmış olarak düşünülmelidir.

+0

"process_one" ve "process_two" yöntemlerinde kod yolu var mı? Eğer render etmeye çalışabilirseniz: hiçbir şey => true veya başka bir şey var –

+0

"if (x) render: process_one else render: process_two" in auth_callback, ama oldukça doğal değil: ben process_one ve process_two güvenmek yerine kendi görüşlerini oluşturmak. –

+0

Eğer bir yere 'dönüş' yazıyorsanız (ya da '(eğer bir şey varsa geri dön)' koduna sahip olursunuz. Raylar varsayılan eylem görünümünü görüntülemeye çalışırdı –

cevap

70

Bu yöntemlerde neden özel olarak render'u aramıyorsunuz?

def process_one 
# do something then render view for process_one 
render :process_one and return 
end 

Raylar, zaten çalıştırdığınızı algılamalı ve yeniden oluşturmayı denememelidir.

+0

Works. Rails bir render zaten çağrılmış olsa bile auth_callback işlemek için çalıştıracağını düşündüm. Çok teşekkürler. –

+0

Bir denetleyici yönteminden dönmek için çok pratiktir (tipik olarak bazı doğrulamalardan sonra aşağıdaki kodu işlemeye gerek yoktur). Teşekkür ederiz :) – lboix

+0

İşlenmeden sonra mantık olmadığından, bu durumda "dönüş" gerekli midir? Başka bir deyişle, eğer metot sıfır değil, yerine 'render' geri dönerse tamam mı? – Dennis

İlgili konular