Подтвердить что ты не робот

Где разместить функции "полезности" модели в Ruby on Rails

У меня есть приложение rails с несколькими моделями.

У меня есть функция, с которой я хочу получить доступ с нескольких моделей.

Какое лучшее место для размещения этого кода и как я могу сделать его доступным для моделей, которые нужно получить?

Я понимаю, что помощники предназначены только для просмотров. Правильно ли это?

Кажется неправильным создать плагин и поместить его в папку поставщика - это мой код и интеграл с моим приложением. Правильно ли это?

Спасибо.

4b9b3361

Ответ 1

Простейшим решением было бы создать модуль под lib и смешать его с моделями, которые в нем нуждаются, например, в lib/fooable.rb:

module Fooable
  def do_foo
  end
end

И затем в ваших различных моделях:

class MyModel < ActiveRecord::Base
  include Fooable
end

Не нужно требовать fooable.rb, механизм автозагрузки Rails найдет его для вас, пока он назван с использованием правильных соглашений.

Ответ 2

Чтобы уменьшить повторение кода, вы также можете создать основной класс, который будет включать этот модуль и просто наследовать его от каждой модели, которой вы хотели бы поделиться своим поведением.

Что-то вроде:

module Fooable
  def do_foo
  end
end

class ParentModel < ActiveRecord::Base
  include Fooable
end

class Product < ParentModel end
class User < ParentModel end
class Item < ActiveRecord::Base end

Таким образом, в этом примере оба продукта и пользователя будут делиться функциональностью do_foo, а Item - нет.