5

ricevo il seguente messaggio di errore quando si richiede la home page del mio campione app (capitolo seguente tutorial di Michael Hartl 11):Impossibile trovare l'associazione fonte (s): followed_id in relazione modello in Rails 3.2

"ActiveRecord::HasManyThroughSourceAssociationNotFoundError in Pages#home"
"Could not find the source association(s) :followed_id in model Relationship. Try 'has_many :followed_users, :through => :relationships, :source => '. Is it one of :follower or :followed?"

Questo è davvero strano, dal momento che ho seguito esattamente le istruzioni del tutorial. Ho persino copiato ogni singolo frammento di codice.

Il mio modello utente (estratto):

class User < ActiveRecord::Base 

    has_many :relationships, foreign_key: "follower_id", dependent: :destroy 
    has_many :followed_users, through: :relationships, source: "followed_id" 

    has_many :reverse_relationships, foreign_key: "followed_id", class_name: "Relationship", dependent: :destroy 
    has_many :followers, through: :reverse_relationships, source: :follower 

Il mio modello di relazione:

class Relationship < ActiveRecord::Base 
    attr_accessible :followed_id 

    belongs_to :follower, class_name: "User" 
    belongs_to :followed, class_name: "User" 

    validates :follower_id, presence: true 
    validates :followed_id, presence: true 
    end 

mio file di migrazione:

class CreateRelationships < ActiveRecord::Migration 
    def change 
     create_table :relationships do |t| 
     t.integer :follower_id 
     t.integer :followed_id 

     t.timestamps 
     end 

     add_index :relationships, :follower_id 
     add_index :relationships, :followed_id 
     add_index :relationships, [:follower_id, :followed_id], unique: true 
    end 
    end 

Ho cercato di risolvere questo problema, ma Semplicemente non mi rimane alcuna idea di quale potrebbe essere il problema (copia esatta del codice dal tutorial).

+0

È possibile pubblicare la soluzione come risposta e accettarla in modo che le persone non passino il tempo a leggere la domanda solo per scoprire di averlo risolto. – EricM

+0

Questo è quello che ho provato prima, ma non mi permetteva di dire "gli utenti al di sotto di una certa reputazione non possono rispondere alle loro stesse domande". Ad ogni modo, inserirò la modifica in cima alla domanda. Mi dispiace se hai letto l'intera domanda solo per scoprire che l'avevo già risolto. –

risposta

13

Trovato l'errore: Nel mio modello utente Ho dovuto cambiare

has_many :followed_users, through: :relationships, source: "followed_id" 

a

has_many :followed_users, through: :relationships, source: :followed 

sembra essere un errore di battitura nel tutorial di Hartl Listing 11.10 http://ruby.railstutorial.org/book/ruby-on-rails-tutorial#code:has_many_following_through_relationships, in quanto è lì che ho ottenuto il "source:" follows_id "" codice da.

Ho ottenuto il codice fisso dalla "app di esempio" di Hartl.