用"全球"多对多的Rails选项

时间:2015-06-01 14:30:46

标签: ruby-on-rails postgresql many-to-many

我正在使用rails中的多站点博客。我的数据模型类似于:

Site
has_many :postings
has_many :posts, through: :postings


Post
has_many :postings
has_many :sites, through: :postings

Posting
belongs_to :site
belongs_to :post

我试图找出将帖子标记为"全球"的最佳方法。所以任何网站,包括将来创建的网站,都可以访问该帖子。现在,Post有一个全局布尔属性,我在Site模型上有一个after_create回调,它循环遍历所有全局帖子,并创建一个Posting将其添加到新站点。这很好用,因为它允许我轻松查询site.posts,但我觉得必须有一个更好的方法来避免需要after_create回调。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这个宝石似乎做了我想做的事:https://github.com/brianhempel/active_record_union

# site.rb
def all_posts
  Post.where(global: true).union(posts.where(posts: { global: false }))
end