Ruby on rails 在Rails中限定同一类的数组的范围

Ruby on rails 在Rails中限定同一类的数组的范围,ruby-on-rails,model,named-scope,Ruby On Rails,Model,Named Scope,我有两个模型板和图片,我希望用户能够评论板作为一个整体或个人图片 我的多态评论模型: class Comment < ActiveRecord::Base belongs_to :commentable, polymorphic: true end 我真正想做的是添加一个新的范围,称为类似于all_comments,它将来自Board模型的注释与来自Pictures模型的相关注释相结合。我可以用一个方法来实现这一点,但最终得到的是一个数组,而不是一个作用域关系 我的方法:

我有两个模型板和图片,我希望用户能够评论板作为一个整体或个人图片

我的多态评论模型:

 class Comment < ActiveRecord::Base
     belongs_to :commentable, polymorphic: true
 end
我真正想做的是添加一个新的范围,称为类似于all_comments,它将来自Board模型的注释与来自Pictures模型的相关注释相结合。我可以用一个方法来实现这一点,但最终得到的是一个数组,而不是一个作用域关系

我的方法:

def all_comments
    comments = self.comments
    return comments + self.pictures.map {|x| x.comments}.flatten
end

如何返回可以链接结果的范围关系?

首先,图片应该是单数的

第二,你可以打电话给一个查询者,查询你想要的所有评论

Comment.wheretype='board'和id IN或type='picture'和id IN,self.id,self.pictures.map&:id


或者类似的东西。

首先,图片应该是单数的

第二,你可以打电话给一个查询者,查询你想要的所有评论

Comment.wheretype='board'和id IN或type='picture'和id IN,self.id,self.pictures.map&:id

或者类似的东西。

phoet的回答吸引了我的兴趣,所以这里是我对他建议的重构/扩展:

您可以查看注释模型以提取相关注释。要做到这一点,你首先需要了解电路板和与之相关的图片。Phoet使用self.pictures对象执行以下操作:

#app/models/comment.rb
Class Board < ActiveRecord::Base
    def all_comments
        ids = self.id + self.pictures.map(&:id)
        Comment.find(ids)
    end
end
这将在注释模型中找到ID,并将数据作为集合返回。如果你想要一个层次化评论的真实表示,你必须使用某种祖先/继承结构,我想,phoet的回答让我对I+1'd感兴趣,下面是我对他建议的重构/扩展:

您可以查看注释模型以提取相关注释。要做到这一点,你首先需要了解电路板和与之相关的图片。Phoet使用self.pictures对象执行以下操作:

#app/models/comment.rb
Class Board < ActiveRecord::Base
    def all_comments
        ids = self.id + self.pictures.map(&:id)
        Comment.find(ids)
    end
end

这将在注释模型中找到ID,并将数据作为集合返回。如果你想要一个真实的等级评论,你必须使用某种祖先/继承结构,我认为

请看这里:@DamienRoche你需要为你提出的解决方案创建一个合适的范围,不会和你一起工作的map@phoet感谢您指出这一点。请参阅此处:@DamienRoche您需要为您提出的解决方案创建一个适当的范围,但它不会与map@phoet谢谢你指出这一点。简单永远是答案。真不敢相信我竟然没想到这个!谢谢。简单永远是答案。真不敢相信我竟然没想到这个!谢谢。不,这不管用,但试试看很有趣。它将匹配其他也在使用注释模型的模型的ID。不,这不起作用,但是尝试一下很有趣。它将匹配其他也使用注释模型的模型的ID。