1

У меня есть два простых класса Company и Votings, которые я тестирую с помощью rspec.ActiveRecord counter_cache увеличивает db, но не экземпляр

Когда я добавить голосование в компанию он получает подсчитывались с помощью ActiveRecord

class Company < ActiveRecord::Base 
    attr_accessible :name, :votings_count 
    has_many :votings, :dependent => :destroy 
end 

и этого голосования класса:

class Voting < ActiveRecord::Base 
    attr_accessible :percent, :company, :company_id 

    belongs_to :company, counter_cache: true 
end 

и этот простой RSpec

require 'spec_helper' 

describe Company do 
    it "should count the votings in a table" do 
    c = Company.new(Fabricate.attributes_for :company) 
    c.save 
    c.votings.create(Fabricate.attributes_for :voting) 
    c.votings_count.should == 1 
    end 
end 
#expected: 1 
#got: 0 (using ==) 

колонка не ноль. По умолчанию = 0

add_column :companies, :votings_count, :integer, default: 0 

Я последовал пример из Ryans counter_cache гипса ->http://railscasts.com/episodes/23-counter-cache-column?view=asciicast

БД считается правильно, но экземпляр не обновляется.

У меня неправильная установка? Почему так ведут себя?

большое спасибо!

ответ

0

Вам необходимо перезагрузить экземпляр, чтобы отразить изменения в db.

# ... 
c.save 
c.votings.create(Fabricate.attributes_for :voting) 
# Add this line 
c.reload 
c.votings_count.should == 1 
+0

wow прохладный. Спасибо! – Jan

+0

Нет, это не круто! Поскольку перезагрузка делает запрос к db (что необязательно). Он должен автоматически обновляться в соответствующем экземпляре. – pablo

 Смежные вопросы

  • Нет связанных вопросов^_^