我们计划将我们的应用程序升级到Rails3。我们使用过的一个插件是nested_has_many_through。这个插件似乎过时了,不再维护,并且似乎没有在新的Rails3应用程序中工作。
一个简单的例子:
Author.rb
has_many :posts
has_many :categories, :through => :posts, :uniq => true
has_many :related_posts, :through => :categories
Post.rb
belongs_to :author
belongs_to :category
Category.rb
has_many :posts
任何人都可以推荐最佳实践方法来处理这个问题,或者使用Rails3插件吗?
谢谢!
答案 0 :(得分:7)
这是使用Rails 3.1内置的:http://asciicasts.com/episodes/265-rails-3-1-overview
答案 1 :(得分:0)
我对has_many:related_posts部分感到困惑。您是否尝试将分类帖子基本联合起来?比如,“x”类别中的所有帖子都被视为“相关”?如果是这样,基于没有RelatedPost类,这将无法工作,因此要在最低限度上修复此问题,您必须在关联上指定:class_name:
has_many :related_posts, :class_name => 'Post', :through => :categories
但其次,这可能不是开始的正确方法。由于任何作者都已经通过author_id外键发布了很多帖子,因此尝试编织类别表没有任何意义,而是使用分组逻辑。
清理它的替代方法:
Author.rb
has_many :posts do
def related
all.group_by(&:category_id)
end
end
author.posts.related
=> OrderedHash
当然,如果不是你想要完成的事情,所有这一切都没有实际意义。 :P
答案 2 :(得分:0)
Rails 3(未经测试,按大多数相关类别的帖子排序):
category.rb:
class Category < ActiveRecord::Base
class << self
def posts
Post.joins(:categories).
where(:categories => select('id').all.map(&:id)).
group('posts.id').
order('count(*) DESC')
end
end
end
用法:
related_posts = author.categories.posts