我正在使用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回调。有什么想法吗?
答案 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