Rails настолько волшебен, что мне нужна помощь человека, который знает его немного лучше меня.
Поскольку у меня есть много грубых базовых конечных точек API, повторяющихся снова и снова, я решил автоматизировать их создание (см. мой последний пост в следующем ошибка github).
Ради того, чтобы иметь некоторую базовую действительную документацию по чванству, я также автоматизировал создание Grape::Entities, добавив некоторый пользовательский код в мою ApplicationRecord (см. Фрагмент РЕШЕНИЯ github, добавленный к этому вопросу: Наследование определения класса от родительского класса).
С помощью двух вышеуказанных настроек я могу создать конечную точку API, просто выполнив:
V1::Base.show Book
Приведенный выше метод создаст конечную точку и будет использовать автоматически созданную сущность, например, чтобы она автоматически документировалась со значениями по умолчанию, которые при необходимости можно переопределить позже в классе модели Book:
Book::Entity
Существует 1 исключение, когда приведенный выше код кажется неработающим: кажется, что всякий раз, когда я взаимодействую в раннем состоянии во время начальной загрузки моего приложения Rails (например, инициализаторы), когда я вызываю V1::Base.show Book
(для создания конечной точки API), который вызывает Book::Entity
возвращается следующая ошибка:
NameError: uninitialized constant Book::Entity
Кто-нибудь может подсказать, что это может быть? раннее взаимодействие с моделью может быть простым Book.all, это пахнет тредом.
Entities::Book = Class.new(Grape::Entity) { expose *Book.attribute_names}
. Кажется, эту концепцию можно легко исправить непосредственно в вашем методе#show
, поскольку вы уже проверяете определения констант. - person engineersmnky   schedule 21.11.2017Book
не загружено и, следовательно,Book::Entity
недопустимо, потому чтоBook
в настоящее время не является допустимым пространством имен. Если бы вы сделали это в инициализаторе, вам, по сути, нужно было бы загрузить каждую модель (которая обычно лениво загружается по мере необходимости), чтобы у вас было объявленное пространство имен, в котором можно сгенерировать классEntity
. Для постоянного поиска требуется диаграмма глубины, гдеclass Book; class Entity; end; end;
может разрешить пространство именBook
, ноclass Book::Entity; end;
не может Хорошая, достаточно краткая статья а> - person engineersmnky   schedule 22.11.2017