أين هو مكان جيد لطريقة شائعة الاستخدام ... في القضبان

StackOverflow https://stackoverflow.com/questions/1366989

سؤال

لدي طريقة بدأت في استخدامها في نماذج متعددة لـ 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
هل كانت مفيدة؟

المحلول

ضع Retry.rb في lib/

module Retryable
  extend self

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

استخدمه:

Retryable.retryable { ... }

أو بما في ذلك مساحة الاسم:

include Retryable
retryable { ... }

نصائح أخرى

يمكنك إنشاء وحدة نمطية. مثال من الوحش تغير المشروع: (غالبًا ما أنظر في مشاريع أخرى كيف يحلون مشاكل محددة)

# 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top