ActiveRecord :: HasManyThroughAssociationNotFoundError в UserController # welcome - PullRequest
18 голосов
/ 31 января 2010

У меня много-много отношений в рельсах. Все таблицы базы данных названы соответственно и соответствующим образом. Все файлы моделей являются множественными и используют подчеркивание для разделения слов. Все правила именования сопровождаются стандартами ruby ​​и rails. Я использую имеет много сквозных в моих моделях, как это:

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

Откуда еще может быть эта ошибка?

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

1 Ответ

38 голосов
/ 31 января 2010

При использовании 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

Это работает лучше всего, когда вам нужно хранить данные, относящиеся к самой модели соединения, или если вы хотите выполнять проверки соединения отдельно от двух других моделей.

Если вам просто нужна простая таблица соединений, проще использовать старый синтаксис HABTM:

class User < ActiveRecord::Base
  has_and_belongs_to_many :posts
end

class Post < ActiveRecord::Base
  has_and_belongs_to_many :users
end
...