2009-09-02 55 views
1

我有一個方法,我已經開始在多個模型中使用WebScrapping,哪裏是保持它的最佳位置?我應該把它放在application_controller中,應用程序_helper?我不確定一個好的地方放在多個模型中去使用它嗎?哪裏是一個常用的方法的好地方...在軌道上

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 

回答

1

認沽retryable.rb/

module Retryable 
    extend self 

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

使用它:

Retryable.retryable { ... } 

或包括命名空間:

include Retryable 
retryable { ... } 
3

您可以創建一個模塊。從Altered Beast項目的例子:(我經常看在其他項目中他們是如何解決具體問題)

# 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 

而在車型:在LIB

# 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

你把它放在模型/用戶而不是lib的任何特定原因? – 2009-09-02 12:23:09

+0

我不確定這是如何工作的......他們沒有引用editable_by?在其他模型本身。我試着把它放在一個類似的文件夾#app/models/scrapers/retryable.rb,模塊Scrapers :: Retryable中,然後引用它爲「include Scrapers :: Retryable」,但它給了我「未定義的方法'retryable'Get_Data:Class 「 – holden 2009-09-02 13:01:30

相關問題