我如何获得标签所属的所有帖子?轨道

时间:2014-07-22 23:13:11

标签: ruby-on-rails

所以我为这些模型设置做事的方式与你实际做的有点不同。我怎么做过这样的事情:

发布模型

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

如何实现我的目标?

1 个答案:

答案 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应返回给定标记的所有帖子。