Попробуйте использовать : включите Это должно значительно помочь, так как будет загружать записи из связанных таблиц.
User
has_many :tag_followings
has_many :tags, :through => :tag_followings, :include => [:article]
Article
has_many :tag_attachings
has_many :tags, :through => :tag_attachings, :include => [:user]
Ваш оператор для извлечения данных может выглядеть следующим образом:
User.find(1).tags.collect { |t| t.article.id }
Выполнение из вашего log / development.log должно быть из:
User Load (0.3ms) SELECT users.* FROM users WHERE (users.id = 1) LIMIT 1
Tag Load (1.2ms) SELECT tags.* FROM tags WHERE (users.tag_id =1)
Article Load (3.2ms) SELECT articles.* FROM articles WHERE (articles.tag_id = 1)
Article Load (3.2ms) SELECT articles.* FROM articles WHERE (articles.tag_id = 3)
Article Load (3.2ms) SELECT articles.* FROM articles WHERE (articles.tag_id = 7)
до:
User Load (0.3ms) SELECT users.* FROM users WHERE (users.id = 1) LIMIT 1
Tag Load (1.2ms) SELECT tags.* FROM tags WHERE (users.tag_id =1)
Article Load (3.2ms) SELECT articles.* FROM articles WHERE (articles.tag_id IN (1,3,7))