Рабочий процесс для базового приложения 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