2009-09-02 4 views
1

J'ai une méthode que j'ai commencé à utiliser dans plusieurs modèles pour Webscrapping, où est le meilleur endroit pour le garder? Dois-je le mettre dans l'application_controller, l'application _helper? Je ne suis pas sûr où un bon endroit est de le mettre pour plusieurs modèles pour l'utiliser?Où est un bon endroit pour une méthode couramment utilisée ... dans les rails

def self.retryable(options = {}, &block) 
    opts = { :tries => 1, :on => Exception }.merge(options) 

    retry_exception, retries = opts[:on], opts[:tries] 

    begin 
     return yield 
    rescue retry_exception 
     retry if (retries -= 1) > 0 
    end 

    yield 
    end 

Répondre

1

Put retryable.rb dans lib/

module Retryable 
    extend self 

    def retryable(options = {}, &block) # no self required 
    ... 
    end 
end 

Utilisez:

Retryable.retryable { ... } 

ou dont l'espace de noms:

include Retryable 
retryable { ... } 
3

Vous pouvez créer un module. Un exemple du projet Altered Beast: (Je regarde souvent dans d'autres projets comment ils résolvent des problèmes spécifiques)

# app/models/user/editable.rb 
module User::Editable 
    def editable_by?(user, is_moderator = nil) 
    is_moderator = user.moderator_of?(forum) if is_moderator.nil? 
    user && (user.id == user_id || is_moderator) 
    end 
end 

Et dans les modèles:

# app/models/post.rb 
class Post < ActiveRecord::Base 
    include User::Editable 
    # ... 
end 

# app/models/topic.rb 
class Topic < ActiveRecord::Base 
    include User::Editable 
    # ... 
end 
+1

Une raison particulière que vous mettez dans les modèles/utilisateur plutôt que lib? –

+0

Je ne suis pas sûr comment cela fonctionne ... ils ne référencent pas editable_by? dans les autres modèles eux-mêmes. J'ai essayé de placer le mien dans un dossier similaire # app/models/scrapers/retryable.rb, module Scrapers :: Retryable et en le référençant comme "include Scrapers :: Retryable" mais il me donne "méthode indéfinie' retryable "pour Get_Data: Class " – holden

Questions connexes