Помимо базового CRUD, как пользователи могут обновлять или удалять множество записей?

У меня очень типичное приложение Rails с сильным использованием CRUD ... но, как мы знаем, они всегда относятся непосредственно к одной записи в модели.

Многие обновления: например, «Пометить выбранное как архивное»

В моем представлении controller#index я хочу иметь возможность разрешить пользователям массовое удаление или массовое обновление записей определенным образом.

Это похоже на Gmail, где вы можете выбрать несколько писем в списке и выбрать change label или move из меню панели инструментов.

Есть ли в Rails шаблон для достижения этого?

Помимо базового CRUD, как пользователи могут обновлять или удалять множество записей?

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
840
3

Ответы 3

Вы можете передать список ids в бэкэнд, а затем выполнить User.where(id: [1,2,3]).destroy_all

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

Turgs 29.06.2018 07:53

Вы также можете выполнять различные операции CRUD с несколькими записями, где вы также передаете идентификаторы выбранной записи, в котором условие, которое вернет коллекцию объектов ActiveRecord, и в этой коллекции вы можете выполнить несколько обновлений, удалить несколько.

User.where(:id =>[23,45,68,123]).update_all(:is_active => true)
User.where(:id =>[23,45,68,123]).destroy_all

Вы можете добавить новые маршруты для обработки действий с несколькими записями (например, сообщениями) в одном запросе:

Внесите изменения, как показано ниже:

# config/routes.rb
resources :posts do
  collection do
    put :bulk_update
    delete :bulk_destroy
  end
end

Он добавит эти новые маршруты в дополнение к обычным маршрутам CRUD:

bulk_update_posts     PUT       /posts/bulk_update(.:format)       posts#bulk_update
bulk_destroy_posts    DELETE    /posts/bulk_destroy(.:format)      posts#bulk_destroy

Теперь добавьте соответствующие действия контроллера для того же:

# app/controllers/posts_controller.rb
before_action :fetch_posts, only: [:bulk_update, :bulk_destroy]

def bulk_update
  @posts.update_all(permitted_params)
  redirect_to posts_path
end

def bulk_destroy
  @posts.destroy_all
  redirect_to posts_path
end

private

def fetch_posts
  @posts = Post.where(id: params[:post_ids])
end

def permitted_params
  # Decide for yourself
end

Другие вопросы по теме