Базовый поток Rails

Рабочий процесс для базового приложения Ruby on Rails:

A. Установите отношения и ассоциации модели

B. Создайте модели, миграции, ассоциации, валидации

rails g model Cheese name price:integer
Вход в полноэкранный режим Выйти из полноэкранного режима

эта команда также создаст таблицу миграции create_cheeses
имя по умолчанию задается как строка

belongs_to :cheese
has_many :stores, through: :cheeses, dependent: :destroy
validates :name, presence: true, uniqueness: true
Войти в полноэкранный режим Выйти из полноэкранного режима

синтаксис для ассоциаций и валидаций, и то и другое делается в файлах model.rb

затем запустить

rails db:migrate db:seed
Войти в полноэкранный режим Выйти из полноэкранного режима

Также есть db:seed:replant для обновления семян базы данных.

C. Маршруты

resources :cheeses, only: [:index, :show, :create, :update, :destroy]
Войти в полноэкранный режим Выход из полноэкранного режима

синтаксис для использования маршрутов ресурсов и only с условными именами для 5 CRUD-функций. Обратите внимание, что only технически не может быть использовано здесь, потому что оно включает все из них.

D. CRUD

Теперь напишем 5 CRUD функций:.
:index и :create не нуждаются в ID, для всех остальных 3 потребуется синтаксис, как здесь:

Cheese.find(params[:id])
Войти в полноэкранный режим Выйти из полноэкранного режима

.find бросит ActiveRecord::RecordNotFound, а использование create! и update! бросит ActiveRecord::RecordInvalid, поэтому мы можем спастись от этих бросков следующим образом:

rescue_from ActiveRecord::RecordNotFound, with: :render_not_found_response
Войти в полноэкранный режим Выйти из полноэкранного режима

функция :render_not_found_response должна быть в приватной секции модели, вместе с оберткой для кода ‘find-by-id’, а также сильными параметрами:

params.permit(:name, :price)
Вход в полноэкранный режим Выход из полноэкранного режима

которые я буду использовать для функций :create и :update, чтобы убедиться, что я получаю правильные данные для объекта.

не забывайте использовать эти состояния:

status: :created, :not_found, :unprocessable_entity
Войти в полноэкранный режим Выйти из полноэкранного режима

Оцените статью
Procodings.ru
Добавить комментарий