2016-01-28 2 views
0

Использование Rails 4.2.2 Я создал следующую миграцию, чтобы добавить counter_cache к модели Пользователи, когда я запускаю rake db: migrate counter показывает текущий: book_shelf_count правильно, но это не обновление, когда он меняетRails 4.2.2 counter_cache не обновляется

add_shelf_book_count.rb

class AddShelfBookCount < ActiveRecord::Migration 
    def self.up 
    add_column :users, :book_shelf_count, :integer, default: 0 

    User.reset_column_information 

    User.find_each { |user| User.reset_counters user.id, :shelf_books } 

    end 

    def self.down 
    remove_column :users, :book_shelf_count 
    end 

end 

user.rb

class User < ActiveRecord::Base 
    has_many :shelf_books, through: :shelves, dependent: :destroy 
end 

shelf.rb

class Shelf < ActiveRecord::Base 
    has_many :shelf_books, dependent: :destroy 
    belongs_to :user, counter_cache: :book_shelf_count 
end 

shelf_book.rb

class ShelfBook < ActiveRecord::Base 
    belongs_to :shelf 
end 

ответ

0

Проблема заключалась в том, что ShelfBook была создана или уничтожена независимо от шельфового, так что нет никакого способа, чтобы обновить counter_cache от шельфа. Для того, чтобы исправить это мне нужно, чтобы реализовать декремент СЧЕТЧИК увеличиваем счетчик и метод в shelf_book.rb

class ShelfBook < ActiveRecord::Base 
    belongs_to :shelf 
    after_create :increment_counter_cache 
    after_destroy :decrease_counter_cache 

    def increment_counter_cache 
    User.increment_counter(:book_shelf_count, find_user) 
    end 

    def decrease_counter_cache 
    User.decrement_counter(:book_shelf_count, find_user) 
    end 

    def find_user 
    Shelf.find(self.shelf_id).user 
    end 
Смежные вопросы