Для этого
def delete_projects_from_user
@user.projects.delete_all
end
Вы лучше используете .destroy_all, чтобы убедиться, что этот объект и все связанные с ним элементы также уничтожены.
.delete_all удаляет только объект и оставляетсвязанные записи в БД
и А для этого:
<%= link_to 'Delete all projects', @user, method: :delete_projects_from_user, data: { confirm: 'Are you sure?' } %>
В своем маршруте вы определили свой маршрут как пост, поэтому он должен быть
method: :post
, чтобы быть похожимthis
<%= link_to 'Delete all projects', @user, method: :post, data: { confirm: 'Are you sure?' } %>
И здесь вы не добавили маршрут правильно, он должен выглядеть следующим образом
<%= link_to 'Delete all projects', YOUR_ROUTE_path(@user), method: :post, data: { confirm: 'Are you sure?' } %>
Хотя рекомендуется определять этот маршрут следующим образом
delete '/users/:id', to: 'users#delete_projects_from_user', as: :delete_projects_from_user
Что касается 2-го варианта, вы также можете использовать коллекцию
resources :users do
collection do
delete 'user/:id', to: 'users#delete_projects_from_user', as: :delete_projects_from_user
end
end
и изменить ссылку на
<%= link_to 'Delete all projects', delete_projects_from_user(@user), method: :delete, data: { confirm: 'Are you sure?' } %>
Оба варианта хороши, и 2-й вариант с удалениемрекомендуется