如何获取属于帖子类型的所有帖子?轨道

时间:2014-09-22 18:33:06

标签: ruby-on-rails

我有两种模式:

class PostType < ActiveRecord::Base
  extend FriendlyId
  friendly_id :name, use: [:slugged, :finders, :history]

  belongs_to :blog
  belongs_to :post

  validates :name, presence: true

end

class Post < ActiveRecord::Base
  extend FriendlyId
  friendly_id :title, use: [:slugged, :finders, :history]

  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

  before_save :set_default_post_type

  ...

  private

  def set_default_post_type
    if self.post_type_id == nil
      post_type_object = PostType.find_by(name: 'post')
      self.post_type_id = post_type_object.id
    end
  end

end

如您所见,Post属于博客,帖子类型属于博客和帖子。创建帖子时,默认帖子类型为1(特定代码将被清除)

所以我的问题是,我如何设置这样的关系:

PostType.find(1).posts.all

现在我可以Blog.find(1).posts.all,因为博客有很多帖子,帖子属于博客,其中帖子有一个post_type,post_types可以属于很多帖子。

1 个答案:

答案 0 :(得分:0)

尝试:

Post.where('post_types.id = ?', some_id).joins(:post_types)

您可以在PostType中创建一个方法:

def posts
  Post.where('post_types.id = ?', id).joins(:post_types)
end