#ruby-on-rails
#ruby-on-rails
Вопрос:
Я хочу, чтобы мой код делал это, когда кто-то нажимает кнопку бронирования, количество гостей, связанных с событием, будет уменьшено на единицу. Ниже приведен мой код:
# show.html.erb
<%= link_to "Booking", event_path(@event), method: :booking, :class => 'btn btn-danger' %>
<hr>
# events_controller.rb
def booking
@event = Event.find(params[:id])
@event.update_column( :guest_capacity, @event.guest_capacity-1)
redirect_to @event
end
Ответ №1:
.update_column
довольно опасно использовать, поскольку оно пропускает все проверки: https://apidock.com/rails/ActiveRecord/Persistence/update_columns .
Что вы можете сделать, это:
def booking
@event = Event.find(params[:id])
@event.decrement(:guest_capacity)
@event.save
redirect_to @event
end
или
def booking
@event = Event.find(params[:id])
@event.guest_capacity -= 1
@event.save
redirect_to @event
end
Комментарии:
1. Спасибо. Однако сейчас я получаю сообщение «Не удалось найти событие без идентификатора». И я меняю строку в show.html.erb на <%= link_to «Бронирование», event_booking_path(@event),:class => ‘btn btn-опасность’ %> . Мой маршрут: «ресурсы: события выполняют ресурсы: комментарии получают «конец бронирования». Не могли бы вы помочь мне с этим?
2. @yy01699 Две вещи: вы хотите
get 'booking'
бытьpatch
запросом, поскольку вы обновляете атрибут. Во-вторых, вам также необходимо определитьid
в маршруте, поскольку вы пытаетесь отправить и это. Что-то вроде:patch 'booking', on: :member
. Таким образом, идентификатор события доступен вparams[:event_id]