Ребята, у меня есть сомнения по поводу правильности реализации кода с помощью рельсов.
У меня есть функция, которая сохраняет некоторые данные о продажах от некоторых операторов, которые в настоящее время просматривают их из электронных таблиц. (nsu, стоимость, рассрочка, дата, флаг и т. д.)
Я реализую интеграцию с API некоторых из этих операторов, чтобы иметь возможность использовать эту автоматическую функцию без необходимости загружать некоторые операторы в Excel.
Поскольку у меня уже все функции работают отлично, я просто собираюсь получать данные по-разному (для каждого оператора). Я подумал о создании пустой модели (без атрибутов) некоторых из этих операторов, чтобы разместить эти функции внутри этих операторов. модели.
Я не знаю, ясно ли я выразился. но идея заключалась бы в том, чтобы создать модель, например, для Stone, где она имела бы функции get_token, get_sales и т. д. все об этом операторе
Я не знаю, правильно ли это, и как мне создать эту модель? Может ли он нормально генерироваться?
rails g model Stone --skip-migration
Не думайте о своем коде как о том, какие функции куда идут. Вместо этого подумайте о том, какую ответственность (обратите внимание, она единственна) несет каждый класс. Также не зацикливайтесь на том, чтобы втиснуть весь свой код в модели, представления и контроллеры только потому, что вы используете платформу MVC. Предложение @LesNightingill — хорошая отправная точка.
При интеграции с API обычно полезно иметь несколько компонентов с четко определенными обязанностями. Клиентские классы должны использовать HTTP и быть единственными классами, пересекающими границы приложения. Модели можно использовать для представления данных в вашем приложении, но они не должны затрагивать границы или каким-либо другим образом связываться с API. Сопоставление данных между API и вашим внутренним представлением можно выполнить в классах адаптеров.
Вы можете просто создать файл модели в папке моделей, но не наследовать его от ApplicationRecord
:
# in app/models/my_custom_model.rb:
class MyCustomModel
def my_method
...
end
end
Rails также предоставляет несколько помощников через Активную модель, которые при необходимости можно добавлять к простым объектам Ruby.
он называется «PORO» или «Обычный старый рубиновый объект». Не стесняйтесь создавать любые объекты Ruby, которые вам нужны. Вы не ограничены стандартными файлами MVC Rails. Поскольку это всего лишь еще один класс Ruby, не используйте генератор рельсов, просто создайте файл. Вы можете поместить их в каталоги Rails
concerns
, если собираетесьinclude
использовать их в своих моделях activerecord. Я поместил все эти (многие) классы вapp/domain_models/
, а если функциональность имеет смысл, поместите их вapp/services
.