所以我为这些模型设置做事的方式与你实际做的有点不同。我怎么做过这样的事情:
class Post < ActiveRecord::Base
belongs_to :blog
belongs_to :user
has_and_belongs_to_many :tags, join_table: 'tags_posts', :dependent => :destroy
has_and_belongs_to_many :categories, join_table: 'categories_posts', :dependent => :destroy
has_many :comments, :dependent => :destroy
validates :title, presence: true
def has_tag?(tag_name)
tags.where(name: tag_name).any?
end
def tag_names
tags.pluck(:name)
end
def tag_names=(names)
self.tags = names.map{ |name| Tag.where(name: name).first }
end
def tag_name=(tag_name)
single_tag = [tag_name]
self.tag_names = single_tag
end
def has_category?(category_name)
categories.where(name: category_name).any?
end
def category_names
categories.pluck(:name)
end
def category_names=(names)
self.categories = names.map{ |name| Category.where(name: name).first }
end
def category_name=(category_name)
single_category_name = [category_name]
self.category_names = single_category_name
end
def user=(id)
user = User.find_by(id: id)
self.user_id = user.id if user
end
end
以上允许我们为用户分配标签和类别以及帖子(最后一部分在我们说话时被重构)。您还可以获取帖子的所有标签和类别,并查看该帖子是否具有特定类别。
现在我想要做的是,在标签模型中(现在)获取标签所属的所有帖子。但我不知道该怎么做......
这是我的标签型号:
class Tag < ActiveRecord::Base
belongs_to :blog
validates :name, presence: true, uniqueness: true
end
如何实现我的目标?
答案 0 :(得分:0)
我不确定如何使用has_and_belong_to_many
执行此操作。但是,使用很多通过它会很容易。通过Rails约定,你的连接表的相同应该是tag_posts或post_tags(第一个模型是单数)。
在你的帖子模型中:
has_many :tag_posts
has_many :tags, :through => :tag_posts
然后在您的Tag模型中,进行类似的设置:
has_many :tag_posts
has_many :posts, :through => :tag_posts
最后,您将创建一个TagPost模型
belongs_to :tag
belongs_to :post
之后,调用tag.posts应返回给定标记的所有帖子。