Rails - counter_cache无效

时间:2017-02-09 13:36:49

标签: ruby-on-rails ruby ruby-on-rails-4 associations rails-activerecord

我正在使用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次预订) - Example for bookings

当我尝试添加预订时,它不会更新。我做错了什么?

这是我从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

我是否需要在活动模型中添加任何内容?

1 个答案:

答案 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。