2014-09-22 70 views
0

我有兩個型號:如何獲取屬於帖子類型的所有帖子? 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 

正如你可以看到專屬於博客,帖子類型屬於兩個博客併發布。帖子時創建都是用缺省後的1型(即特定的代碼將被清理)

所以我的問題是,我該如何建立關係,這樣我可以做創建:

PostType.find(1).posts.all 

現在我可以做Blog.find(1).posts.all,因爲博客有許多帖子和帖子屬於博客,其中帖子有一個post_type和post_types可以屬於很多帖子。

回答

0

嘗試:

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

可以在PostType創建一個方法:

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

['references'](http://apidock.com/rails/v4.0.2/ActiveRecord/QueryMethods/references)應該和['includes']一起使用(http://apidock.com/rails/ActiveRecord/QueryMethods/includes) – 2014-09-22 18:46:13

+0

yes會修復thx – juanpastas 2014-09-22 18:51:18

+0

我覺得這是錯誤的。就像我應該可以通過關係來做到這一點。查看帖子屬於博客的博客有很多帖子。所以我可以做'Blogs.find(x).posts.all'和Post類型作爲帖子只能在帖子類型上發佈。所以我應該能夠做一些像'PostType.find(x).posts.all'否?爲什麼我必須做'.where'和'.references'? (它工作的方式......但......仍然如此 – SeekingTruth 2014-09-22 19:22:22

相關問題