Где разместить функции "полезности" модели в Ruby on Rails
У меня есть приложение rails с несколькими моделями.
У меня есть функция, с которой я хочу получить доступ с нескольких моделей.
Какое лучшее место для размещения этого кода и как я могу сделать его доступным для моделей, которые нужно получить?
Я понимаю, что помощники предназначены только для просмотров. Правильно ли это?
Кажется неправильным создать плагин и поместить его в папку поставщика - это мой код и интеграл с моим приложением. Правильно ли это?
Спасибо.
Ответы
Ответ 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 - нет.