0

Я намерен хранить в базе данных минимальный объем информации, относящейся к книге (название, isbn). Однако на дисплее я хотел бы отображать дополнительные атрибуты (страницы, автор, обложка), которые не хранятся в базе данных. Я планирую получить эту информацию от Amazon Web Services (AWS), используя Ruby/AWS. Я очень новичок в Ruby on Rails и не знаю точно, как это будет/должно быть выполнено.Ruby on Rails MVC Вопрос

Некоторые варианты, которые приходят на ум, включают в себя изменение контроллера книг или создание полностью отдельной модели, основанной на сущности Amazon, которая основана на поиске книг, перечисленных только в моей базе данных.

ответ

3

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

+0

Это имеет смысл. Должен ли я создавать определения или атрибуты для поиска из модели? – ahsteele

+0

Создайте методы с именем (страницы, автор, cover_image и т. Д.). В этих методах извлекайте информацию об амазонке и возвращайте заданное значение. Вероятно, вы не захотите сделать вызов AWS для каждого атрибута, чтобы кэшировать результаты AWS, перетащив его в переменную экземпляра активной записи, такую ​​как (@my_aws_result). Это не будет сохраняться, но, по крайней мере, вы ограничите запросы AWS 1 на запрос конечного пользователя. Очевидно, что вы можете использовать более продвинутое кеширование без каких-либо проблем с нарушением работы вашего контроллера и просмотров. Модель будет инкапсулировать эти детали. – jrhicks

1

Я предлагаю создать методы в модели. Вы всегда будете получать дополнительную информацию каждый раз, когда вы показываете эти записи? Если нет, вы захотите, чтобы у вас было другое действие контроллера для «расширенного» (т. Е. С информацией об амазонке) или «ограниченного» (т. Е. Без амазонки), а другого - стандартного. Таким образом вы можете вытащить именно то, что вы хотите, когда захотите, и убедитесь, что вы попали на амазонку только тогда, когда вам нужно, а не с помощью каждого шоу или указательного вызова.

3

Когда вам когда-либо понадобится иметь дело с любыми данными, в любой среде MVC, она должна идти в модели. Вы можете создать дополнительный метод other_information, который использует || = для получения другой информации из AWS или возврата информации из переменной экземпляра. Либо это, либо вы можете создать метод find_with_info, который получает все это одновременно :)

Но вызывающе сохраняйте любые задачи, связанные с данными, в модели.