2016-04-03 13 views
0

Benim kullanım durumum aşağıdadır -Raylar - Denetleyici yardımcıları nereye gitmeli?

Google'a bir API çağrısı yapan bir denetleyici yöntem (eylem) sahibim. Ben lib klasörüne koydum bir sınıf Google oluşturduk. Sınıf Google, api çağrı yöntemini sağlar.

def self.list_items(folder_id, access_token) 
    result = RestClient.get "#{API_URL}/drive/v2/files", 
          { 
           :Authorization => "Bearer #{access_token}", 
           :params => {:q => "'#{folder_id}' in parents and trashed=false"} 
          } 
    return JSON.parse(result)['items'] 
    end 

Ancak, ben Google den list_items çağıran bir yöntem yazmak gerekir, ACCESS_TOKEN, süresi dolmadan ACCESS_TOKEN yeniler, veritabanında yeni access_token kaydeder ve tekrar list_items çağrı yapan halinde durum yakalar.

Bu yöntemin veritabanıyla etkileşime girmesi gerektiğinden, onu bir sınıfa lib içinde eklemek istemiyorum. Raylara yeniyim ve lib klasörünün üçüncü taraf kodunun olması gerektiğini anladım. Google Sınıfı, raylar projesi veya iş mantığım ile hiçbir ilgisi olmayan bir PORO olarak üçüncü taraf sınıfı olarak düşünülebilir. Bu anlayış yanlışsa lütfen beni düzeltin.

Bu yöntemi denetleyicide özel bir yöntem olarak tutabilirim, ancak bu gibi birden fazla yöntem olduğunu varsayalım. Bu kontrolörü şişirmez mi?

Ayrıca, tüm bu yöntemler google özgü iken, denetleyici FileApiController olduğunu. Ayrıca kutuya ve dropbox'a özgü yöntemlerim var. İdeal olarak, db ile etkileşimde bulunan GoogleHelper, DropboxHelper vb. Sınıfları oluşturmak istiyorum. Bu dersleri nerede tutmalıyız?

Grails arka planından geliyorum ve GoogleHelper genelde Grails gibi bir hizmet olarak googleService olarak yapılacaktır. Rayları yapmanın yolu nedir? Spesifik olarak, GoogleHelper dersi nerede tutarsam, nerede tutmalıyım? Yardımcı klasör sadece yardımcıları tutmak için sanırım. Eğer Artık yardımcı çağırabilir sonra kontrolörleri içinde GoogleHelper çağrı application_controller.rb bu include GoogleHelper

bunu eklemek istiyorsanız

cevap

2

app/helpers/google_helper.rb

module GoogleHelper 

class << self 

    def print_hello 
    puts 'HELLO WORLD' 
    end  


    def list_items(folder_id, access_token) 
    result = RestClient.get "#{API_URL}/drive/v2/files", 
          { 
           :Authorization => "Bearer #{access_token}", 
           :params => {:q => "'#{folder_id}' in parents and trashed=false"} 
          } 
    return JSON.parse(result)['items'] 
    end 
end 
end 

dosyayı oluşturun: GoogleHelper.print_hello bir denetleyici içinde.

+0

Kodu, list_items'in içinden kaldırabilirim; bunun yerine, burada "Google.list_items" i arayacağım. Çözümünüz iyi görünüyor, ancak yardımcılar klasörü altındaki sınıfların çoğunlukla yardım için olduğunu düşündüm. Kontrolör yardımcılarını yardımcı klasörün altında tutmak yaygın bir uygulamadır. – vishesh

+0

Evet, iyi uygulamaları, denetleyicileri ve görünümü için yardımcıları kullanmak. – 7urkm3n

+0

Ayrıca, MODEL dosyalarında Helpers 'GoogleHelper.print_hello' öğesini de arayabilirsiniz. – 7urkm3n

İlgili konular