Что такое "ресурс" в Rails?

Тупой вопрос, но у меня есть некоторое замешательство в том, что именно "ресурс" находится в Rails. Этот термин используется повсюду, но я получаю смешное чувство, что его можно использовать довольно свободно. Он упоминается в модели, контроллере и, буквально, в routes.rb.

Это конкретный маршрут? Например, map.resources отображает 7 ресурсов RESTful. Таким образом, примером одного ресурса может быть вызов, например, действия index конкретного контроллера класса?!?

Является ли ссылка ссылкой на всю страницу/объект, который был получен? или, возможно, более узко, таблицу базы данных? или строка, которая была удалена?

Это что-то еще?

Во всяком случае, надеюсь, кто-то может меня прямо посадить...

Ответ 1

Любой объект, который вы хотите, чтобы пользователи могли получать доступ через URI и выполнял операции CRUD (или некоторые его подмножества), может быть рассмотрен как ресурс. В смысле Rails это обычно таблица базы данных, которая представлена ​​моделью и действует через контроллер.

Например, у вас может быть ресурс User (с таблицей users в вашей БД). Это представлено моделью User, сопоставляется с users_controller с map.resources :users (которая затем генерирует маршруты, такие как /users (коллекция пользовательских ресурсов) и /users/1 (определенный пользовательский ресурс).

Вы воздействуете на эти ресурсы, используя соответствующий метод HTTP при обращении к этим ресурсам. POST для коллекции ресурсов (/users) создает новую запись; GET извлекает список ресурсов (/users) или конкретного пользователя (/users/1). PUT обновляет конкретного пользователя (/users/1/), а DELETE уничтожает этого пользователя. URL-адреса совпадают, но результат (и действие контроллера) может отличаться в зависимости от HTTP-глагола. Идея состоит в том, что /users/1 всегда означает "я взаимодействую с пользователем, у которого есть ID # 1", независимо от действия.

Ответ 2

Здесь хорошая статья, в которой обсуждается, как большинство разработчиков считают, что "Ресурс" является сингулярным с таблицей базы данных, аргумент, я думаю, сопоставление с ресурсом сопоставляет контроллер с этой таблицей базы данных (или с ActiveResource, с другим URL-адресом REST).

В принципе, я считаю, что "ресурс" - это "сохраненные данные". map.resources отображает 7 действий RESTful для определенного набора сохраняемых данных.

Но я не слишком много думал об этом. Хороший вопрос!

Ответ 3

откройте папку с вашей моделью, это намек на то, какие у вас есть ресурсы! пример: пользователи, картинки, комментарии...

Ответ 4

Я думаю, что они, вероятно, означают это в общем смысле сети, т.е. Ресурс (Интернет):

референт любого унифицированного идентификатора ресурса

Я не думаю, что это имеет какое-то отношение к таблицам базы данных.

Ответ 5

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

Я бы определил ресурс как маршрут, который отображается на связанные запросы. Поэтому вместо того, чтобы объявлять отдельные маршруты для действий, которые вы хотите выполнить, вы можете просто объявить их с помощью находчивого маршрута. В Rails находчивый маршрут обеспечивает сопоставление между HTTP requests и URLs для controller actions.

Допустим, вы определили resources :users в config/routes.rb
Теперь вы можете использовать несколько помощников для контроллеров в вашем приложении, например edit_user_path который возвращает users/edit.

Ответ 6

Вот хорошая ссылка: https://api.rubyonrails.org/v5.2.1/classes/ActionDispatch/Routing/Mapper/Resources.html

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

ресурсы: фотографии