Domanda

Ho l'Unknown key(s): counter_cache errore quando si cerca di implementare una colonna di cache contatore nel mio RoR app.

I implementato le associazioni modello in questa domanda: Modello questione associazione

Ecco la mia migrazione:

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

Tuttavia, dopo aver visto http://media.railscasts.com/videos/023_counter_cache_column.mov ho pensato che forse avrei dovuto spostare :counter_cache => true nel modello VideoVote dopo belongs_to :video. Tuttavia, quando lo faccio, ottengo l'errore:

wrong number of arguments (2 for 1)

Che cosa sto facendo di sbagliato?

È stato utile?

Soluzione

update_attribute non update_attribteS

p.update_attribute :videos_votes_count, p.video_votes.length

o con update_attributes:

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

UPD 1

:counter_cache => true dovrebbe essere la classe VideoVote:

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

Altri suggerimenti

Per fare counter_caching, è necessario eseguire la migrazione prima che riempie nelle colonne di conteggio prima di includere la dichiarazione counter_cache nel modello. Una volta nel modello, le colonne sono di sola lettura.

Per evitare di sola lettura errori durante l'esecuzione questa migrazione, si dovrebbe usare reset_counters:

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

La soluzione di Riscrittura Rajive Jain:

dichiarazione Rimuovere :counter_cache => true dal file di modello.

Eseguire nuovamente la migrazione: rake db:migrate

Aggiungere l'istruzione counter_cache nel modello: :counter_cache => true

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top