1

Webscraping の複数のモデルで使用し始めたメソッドがあります。どこに保管するのが最適ですか? application_controller、application_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
4

2 に答える 2

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

そしてモデルでは:

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

# app/models/topic.rb
class Topic < ActiveRecord::Base
  include User::Editable
  # ...
end
于 2009-09-02T10:58:43.280 に答える
1

retryable.rb を lib/ に置きます

module Retryable
  extend self

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

これを使って:

Retryable.retryable { ... }

または名前空間を含む:

include Retryable
retryable { ... }
于 2009-09-07T11:35:28.393 に答える