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