Я создаю приложение событий с использованием Rails и добавил связь counter_cache между моделями Event и Booking, чтобы зафиксировать количество заказов, сделанных на каждом событии.Rails - counter_cache не работает
I'v добавил строку кода к моей странице шоу Event специально для создателя события, чтобы показать им, сколько заказов было сделано -
<% if user_signed_in? and current_user == @event.user %>
<button><%= link_to "Edit", edit_event_path %></button>
<button> <%= link_to "Delete", event_path, method: :delete, data: { confirm: "Are you sure?"} %></button>
<p><%= pluralize @event.bookings_count.size, 'booking' %></p>
Все текущие события я настроил (8 заказов) -
При попытке добавить заказ он не обновляется. Что я делаю не так?
Это моя миграция из когда я добавил bookings_count к моей таблице событий -
class AddBookingsCountToEvents < ActiveRecord::Migration
def change
add_column :events, :bookings_count, :integer, default: 0
Event.reset_column_information
Event.all.each do |e|
Event.update_counters e.id, :bookings_count => e.bookings.length
end
end
end
мне нужно добавить что-нибудь в моем контроллере мероприятия? Я установил мою модель бронирования в соответствии с инструкциями -
belongs_to :event, counter_cache: true
Нужно ли что-либо добавить к моей модели событий?
Замечание небольшой стороны: Плохая идея ссылаться на модели (т. Е. «Событие») изнутри миграции. Это связано с тем, что если вы когда-либо переименовали их, ваши старые миграции станут недействительными (синтаксические ошибки из-за неопределенных констант/методов). Кроме того, способ, которым вы поместили логику инициализации ('Event.update_counters') внутри метода' change', делает миграцию необратимой в ее текущей форме! –
Спасибо за это, я не знал. Так было на Railscasts, хотя это довольно старые видео. Любая идея, как я могу исправить проблему? –
Можно ли отладить значение, которое вы обновляете при миграции? просто ставит e.bookings.length –