16

Ho una relazione molti a molti nei binari. Tutte le tabelle del database sono denominate di conseguenza e in modo appropriato. Tutti i file di modello sono plurali e usano il carattere di sottolineatura per separare le parole. Tutti i nomi di battesimo sono seguiti da standard di rubini e rotaie. Sto usando ha molti attraverso i miei modelli come questo:ActiveRecord :: HasManyThroughAssociationNotFoundError in UserController # welcome

has_many :users, :through => :users_posts #Post model 
has_many :posts, :through => :users_posts #User model 
belongs_to :users #UsersSource model 
belongs_to :posts #UsersSource model 

Che altro potrebbe essere questo errore da?

ActiveRecord::HasManyThroughAssociationNotFoundError in UsersController#welcome Could not find the association :users_posts in model Post

+0

Esattamente lo stesso problema risolto qui: http://stackoverflow.com/questions/944126/rails-has -Molti-through-problema – 18bytes

risposta

36

è necessario definire il modello come un'associazione separata join quando si utilizza has_many :through:

class Post < ActiveRecord::Base 
    has_many :user_posts 
    has_many :users, :through => :user_posts 
end 

class User < ActiveRecord::Base 
    has_many :user_posts 
    has_many :posts, :through => :user_posts 
end 

class UserPost < ActiveRecord::Base 
    belongs_to :user # foreign_key is user_id 
    belongs_to :post # foreign_key is post_id 
end 

Questo funziona meglio quando è necessario mantenere i dati che riguarda il modello di unire in sé, o se si desidera eseguire convalide sul join separate dagli altri due modelli.

Se si desidera solo un semplice join tavolo, è più facile da usare la vecchia sintassi HABTM:

class User < ActiveRecord::Base 
    has_and_belongs_to_many :posts 
end 

class Post < ActiveRecord::Base 
    has_and_belongs_to_many :users 
end