Rails, где поставить метод для использования во всех моделях - PullRequest
12 голосов
/ 07 февраля 2012

Где я должен поместить метод в Rails, который будет использоваться всеми моими моделями?

Ответы [ 4 ]

12 голосов
/ 07 февраля 2012

Вы можете написать повторно используемые методы в модуле и включить в необходимые модели.

создать файл в lib / reusable.rb

module Reusable
   def reusable_method_1
     puts "reusable"
   end

   def reusable_method_2
     puts "reusable"
   end
end

Скажем, если вы хотите использовать это в пользовательской модели

class User < ActiveRecord::Base
  include Reusable
end

А также убедитесь, что autoload_path включен для каталога lib / в application.rb

# Custom directories with classes and modules you want to be autoloadable.
config.autoload_paths += %W(#{config.root}/lib)
4 голосов
/ 07 февраля 2012

Активные расширения записи при запуске сервера

# config/initializers/core_extensions.rb
class ActiveRecord::Base
  # write ur common base code here
  def self.per_page
    @@per_page ||= 10
  end

  def self.pagination(options)
    paginate :per_page => options[:per_page] || per_page, :page => options[:page]
  end
end
2 голосов
/ 07 февраля 2012

Есть несколько способов добиться этого

  1. Используйте ООП и создайте подкласс для ActiveRecord :: Base в вашем проекте и используйте этот класс в качестве родительского для всех ваших моделей
  2. Путь обезьяны ActiveRecord :: Base
  3. Создайте модуль и включите его во все ваши модели
0 голосов
/ 07 февраля 2012

Вы захотите провести исследование Rails-соглашения, которое называется «Concerns».Вот нижеследующее: создайте подкаталог под названием проблемы в каталоге вашего приложения.Создайте свой модуль в приложении / задачах и включите модуль во все ваши модели.Добавьте путь к app / беспокойства в ваш config.autoload_path в config / application.rb.

Прежде чем вы сделаете что-либо из этого, мне любопытно, какой метод должен быть включен во ВСЕ модели?Сколько моделей мы говорим и какую проблему вы пытаетесь решить?

...