Вопрос

Я получаю ошибку Unknown key(s): counter_cache При попытке реализовать столбец встречного кэша в моем приложении ROR.

Я внедрил модельные ассоциации в этом вопросе: Модель Ассоциации Вопрос

Вот моя миграция:

class AddVideoVotesCountToVideos < ActiveRecord::Migration
  def self.up
    add_column :videos, :video_votes_count, :integer, :default => 0

    Video.reset_column_information
    Video.find(:all).each do |p|
      p.update_attributes :videos_votes_count, p.video_votes.length
    end
  end

  def self.down
    remove_column :videos, :video_votes_count
  end
end

Однако после просмотра http://media.railscasts.com/videos/023_counter_cache_column.mov Я думал, что, может быть, мне пришлось двигаться :counter_cache => true в видео модель после belongs_to :video. Анкет Однако, когда я это делаю, я получаю ошибку:

wrong number of arguments (2 for 1)

Что я делаю не так?

Это было полезно?

Решение

update_attribute нет update_attribteS

p.update_attribute :videos_votes_count, p.video_votes.length

или с update_attributes:

p.update_attributes( :video_votes_count => p.video_votes.length )

Upd 1

:counter_cache => true Должен быть в классе VideoVote:

class VideoVote < ActiveRecord::Base
  belongs_to :user
  belongs_to :video, :counter_cache => true
end

Другие советы

Чтобы сделать Contre_caching, сначала необходимо запустить миграцию, которая заполняет столбцы счета, прежде чем вы включите оператор Counter_Cache в модель. Оказавшись в модели, столбцы читаются только.

Чтобы избежать ошибок только для чтения при выполнении этой миграции, вы должны использовать Reset_counters:

Video.find_each do |video|
  Video.reset_counters video.id, :video_votes
end

Переписывание решения Радживе Джайна:

Удалять :counter_cache => true оператор из файла модели.

Повторить миграцию: rake db:migrate

Добавьте оператор counter_cache в свою модель: :counter_cache => true

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top