У меня очень типичное приложение Rails с сильным использованием CRUD ... но, как мы знаем, они всегда относятся непосредственно к одной записи в модели.
В моем представлении controller#index я хочу иметь возможность разрешить пользователям массовое удаление или массовое обновление записей определенным образом.
Это похоже на Gmail, где вы можете выбрать несколько писем в списке и выбрать change label или move из меню панели инструментов.
Есть ли в Rails шаблон для достижения этого?
Я знаю, что могу удалить все, что захочу, используя запросы SQL или ActiveRecord. Меня больше беспокоит, как должны выглядеть контроллер и маршруты, и есть ли уже для этого шаблон.





Вы можете передать список ids в бэкэнд, а затем выполнить User.where(id: [1,2,3]).destroy_all
Вы также можете выполнять различные операции 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
Меня больше беспокоит, как должны выглядеть контроллер и маршруты, и есть ли уже для этого шаблон. Я знаю, что могу удалить все, что захочу, используя запросы SQL или ActiveRecord. Я уточню это в своем вопросе.