我正在使用Rails构建一个事件应用程序,并在我的事件和预订模型之间添加了一个counter_cache关联,以捕获每个事件的预订数量。
我在我的活动节目页面添加了一行代码,专门为活动的创建者展示了他们已经预订了多少次 -
<% 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添加到Events表时的迁移 -
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
我是否需要在Events控制器中添加任何内容?我按照指南设置了我的预订模式 -
belongs_to :event, counter_cache: true
我是否需要在活动模型中添加任何内容?
答案 0 :(得分:0)
这只是我个人代码不好的情况,我用过 -
<p><%= pluralize @event.bookings_count.size, 'booking' %></p>
实际应该是 -
<p><%= pluralize @event.bookings.size, 'booking' %></p>
然而,这仍然会使用数据库进行计数,因此,使用counter_cache的使用是多余的,所以使用它 -
<p><%= pluralize @event.bookings_count, 'booking' %></p>
给了我正在寻找的输出,并且还以预期的方式利用counter_cache。