16

Tengo una relación muchos a muchos en rieles. Todas las tablas de la base de datos se nombran en consecuencia y de manera apropiada. Todos los archivos de modelo son plurales y usan subrayado para separar palabras. Todos los convenios de nombres son seguidos por los estándares ruby ​​y rails. Estoy usando tiene muchos en mis modelos como este:ActiveRecord :: HasManyThroughAssociationNotFoundError en 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 

¿De qué más podría ser este error?

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

+0

Exactamente el mismo problema resuelto aquí: http://stackoverflow.com/questions/944126/rails-has -mucho a través del problema – 18bytes

Respuesta

36

es necesario definir el modelo como una asociación separada se unen al utilizar 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 

Esto funciona mejor cuando se necesita para mantener los datos que se refiere al modelo de juntarse, o si desea realizar validaciones en la unión separada de los otros dos modelos.

Si lo que desea es una sencilla tabla de unión, es más fácil usar la sintaxis de edad HABTM:

class User < ActiveRecord::Base 
    has_and_belongs_to_many :posts 
end 

class Post < ActiveRecord::Base 
    has_and_belongs_to_many :users 
end