Sql 将多个表连接在一起的Rails

Sql 将多个表连接在一起的Rails,sql,ruby-on-rails,ruby,ruby-on-rails-4,Sql,Ruby On Rails,Ruby,Ruby On Rails 4,因此,我试图创建一个新闻提要,但我不确定如何进行查询 我有一个用户模型,一个跟踪位置的模型和一个跟踪用户的模型。然后我有了一个评论模型。我需要从用户那里获取用户关注的所有评论,以及用户关注的某个位置的所有评论,我必须将它们放在一起 我不太熟悉如何在sql或rails中实现这一点。有人能把我链接到一篇文章或文档上,让我找到如何做到这一点吗 如果你需要更多的信息,请评论我还应该包括哪些内容,因为我不确定该在帖子中包括哪些内容 注释模型看起来像这样,它是多态的,可以发布到位置和事件 create_ta

因此,我试图创建一个新闻提要,但我不确定如何进行查询

我有一个用户模型,一个跟踪位置的模型和一个跟踪用户的模型。然后我有了一个评论模型。我需要从用户那里获取用户关注的所有评论,以及用户关注的某个位置的所有评论,我必须将它们放在一起

我不太熟悉如何在sql或rails中实现这一点。有人能把我链接到一篇文章或文档上,让我找到如何做到这一点吗

如果你需要更多的信息,请评论我还应该包括哪些内容,因为我不确定该在帖子中包括哪些内容

注释模型看起来像这样,它是多态的,可以发布到位置和事件

create_table :comments do |t|
  t.text :text
  t.integer :user_id
  t.integer :commentable_id
  t.string :commentable_type
然后有两个单独的表,分别用于以下用户和以下位置

create_table :followed_locations do |t|
  t.integer :user_id
  t.integer :location_id

create_table :followed_users do |t|
  t.integer :user_id
  t.integer :followed_id

以下是模型关联的外观:

class User < ActiveRecord::Base
    has_many :comments, as: :commentable
    has_many :followed_locations
    has_many :followed_users

    def followed_items
        followed_locations.map(&:location).flatten + followed_users.map(&:followed).flatten
    end
end

class Location < ActiveRecord::Base
    has_many :comments, as: :commentable
end

class FollowedUser < ActiveRecord::Base
    belongs_to :user
    belongs_to :followed, class_name: 'User'
end

class FollowedLocation < ActiveRecord::Base
    belongs_to :user
    belongs_to :location
end

class Comment < ActiveRecord::Base
    belongs_to :commentable, polymorphic: true
end
这将收集一个用户(包括位置和其他用户)的所有后续项目,获得他们所有评论的列表,然后将它们展平到一个简单的数组中。如果要对它们进行排序,例如我的作品,请将其钉在末尾:

user.followed_items.map(&:comments).flatten.sort_by(&:created_at)
有很多方法可以优化这一点,但在这一点上,你可能只想把重点放在把概念写下来

更新:

我创建了一个实现此解决方案的简单Rails 4应用程序,并将其发布在github上:


发布一小段代码,演示如何定义模型,将有助于更准确地回答这个问题。您的评论与其他元素有何关联?它们是多态的,还是位置注释和用户注释作为不同的模型?我将根据您刚才提供的模型信息对我的答案进行更正。我这样做了,并尝试使用代码,但它不起作用。它为nil:NilClass错误提供了一个未定义的方法“comments”。使用代码行@user=user.find(params[:user_id])@items=@user.followed_items.map(&:comments)。我很快创建了一个Rails 4应用程序来测试我给你的代码,它可以正常工作。我在上面的答案末尾添加了到github存储库的链接。请检查您的代码,确保您准确地实现了我的建议,并让我知道它是如何运行的。是的,我的代码与您的代码完全相同,它仍然为我提供了nil:nilclass的未定义方法“comments”,您可以粘贴您的followed_items方法吗?这就是你错误的根源。对不起,我想我知道问题所在。您有一个FollowedUser或FollowedLocation记录,其中followed\u id或location\u id为nil,或指向不存在的记录。这是一个数据完整性问题。你可以通过“用户.SuxEdEdStask.Calp.map(&:注释).FLUTEN”来快速修复它,但它是一个创可贴解决方案。您需要找到断开的联接记录。
user.followed_items.map(&:comments).flatten.sort_by(&:created_at)