我已经尝试过如何导航所需的关联,但是我似乎无法弄清楚。我正在尝试让所有Posts
给定的Tag
。当前,每个帖子都有标题和正文,两者均以表示TaggedText
。每个TaggedText可以具有许多唯一的标签-例如在Facebook帖子中标记多个人/页面(保存实例时,模型中会强制执行唯一性)。
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
为了使查询正常工作,我缺少什么?还是应该以某种方式重组模型和关联?
错误状态时,您需要向模型添加tag_ranges
关联Post
。我还添加了一些可能会或可能不会有用的关联,并且这些关联会大大简化您的查询。并不是说您的TagRange
班级的联系就这样。
class Tag < ActiveRecord::Base
has_many :tag_ranges # need this association in order to get tagged_texts
has_many :tagged_texts, through: :tag_ranges
has_many :posts, -> { uniq }, through: :tagged_texts # posts with the given tag
end
class Post < ActiveRecord::Base
has_many :tagged_texts
has_many :tag_ranges, through: :tagged_texts # Post now has association named 'tagged_ranges'
has_many :tags, -> { uniq }, through: :tag_ranges # tags that given post has
end
class TaggedText < ActiveRecord::Base
has_many :tag_ranges # all tag ranges for a tag text
has_many :tags, through: :tag_range
belongs_to :post
end
现在,您的查询将获取标签的所有帖子:
def get_posts_by_tag(tag, page, posts_per_page)
tag.posts.limit(posts_per_page).offset(page - 1).to_a
end
希望这会有所帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句