0
我试过围绕如何浏览我想要的关联,但我似乎无法弄清楚。我试图得到Tag
的所有Posts
。每个帖子目前都有一个标题和正文文本,这两个文本都表示为TaggedText
。每个TaggedText都可以有许多独特的标签 - 例如在Facebook帖子中标记多个人/页面(保存实例时在模型中实施唯一性)。Rails:跨多个协会提取模型
class Tag < ActiveRecord::Base
has_many :tagged_texts, through: :tag_ranges
end
class Post < ActiveRecord::Base
has_many :tagged_texts
end
class TaggedText < ActiveRecord::Base
# Each TaggedText cannot have more than one of each tag
has_many :tags, through: :tag_ranges
belongs_to :post
end
class TagRange < ActiveRecord::Base
# TaggedText cannot have more than one of each tag
belongs_to :tagged_text
belongs_to :tag
end
我试图连接表,但我得到的错误Association named 'tag_ranges' was not found on Post
:
def get_posts_by_tag(tag, page, posts_per_page)
Post
.joins(:tagged_texts)
.joins(:tag_ranges)
.joins(:tags)
.where('tag.id = ?', tag.id)
.uniq
.limit(posts_per_page)
.offset(page - 1)
.to_a
end
我缺少的是让查询工作 - 或者我应该调整自己的模型和关联不知何故?
奇妙的,完美的作品。谢谢乔!出于好奇,lambda在做什么:' - > {uniq}'?这只是对系统的“暗示”,或者是ActiveRecord实际执行某些事情?我从来没有见过lambda记录,你能找到一个链接到它的文档? – FeifanZ
此外,在'标记'你添加关联'has_many:tag_ranges',显然获得'tagged_texts' ...为什么该关联获得'tagged_texts',而'has_many:tagged_texts,通过::tag_ranges'不? – FeifanZ
我还没有找到' - > {}'的官方文档,这个文档叫做作用域块,但是你可以在[本Rails指南]中找到关于它的一些信息(http://guides.rubyonrails.org/ association_basics.html#范围换拥有多)。它本质上是为你的关联定义一个范围。在这种情况下,它意味着当获得这个帖子的标签时,只返回唯一的标签。 –