Поскольку вам не нужно передавать какие-либо данные на сервер, кроме идентификатора, который будет указан в URL-адресе, поэтому использование link_to
должно подойти.
Используйте этот метод POST, используя :method => :post
при изменении данных на сервере - изменение данных без POSTing - плохая идея
Если вам не нужен специальный вид, вы также можете использовать :remote => true
, чтобы использовать AJAX для отправки формы по этому URL. В противном случае redirect_to
в вашем вопросе будет достаточно.
См. Документацию ActionView для получения дополнительной информации о том, как создать link_to
.
Я бы тогда реализовал логику (как показано ниже) в вашем контроллере напрямую
Использование update_all
для обновления многих объектов в БД
ActiveRecord имеет метод update_all
, который можно вызвать по ActiveRecord::Relation
Он не загружает модели из БД и не вызывает обратные вызовы , но, поскольку установка чего-либо, что не является ложным, ложным, функционально эквивалентно установке всего ложного с его использованием, как это может соответствовать вашей цели
Wall.find(params[:id]).problems.update_all(:is_live => false)
Вы можете указать условный параметр для update_all
Wall.find(params[:id]).problems.update_all(:is_live => false, "is_live = true")
или, альтернативно, сначала выполните команду where, но при этом сначала будут загружены все данные из базы данных, и в вашем случае это не нужно. Здесь важно отметить, что метод update_all
работает на ActiveRecord::Relation
, а не ActiveRecord::Base
Wall.find(params[:id]).problems.where(:is_live => true).update_all(:is_live => false)