Ruby on Rails errore della cache contatore
-
27-10-2019 - |
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?
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