Ruby on rails Rails将多个连接合并到一个方法中
我的应用程序中有一个用户,可以有多个评估、计划和资料。在我的数据库中,它们之间已经存在关系。我希望在一个选项卡中显示所有这些,而不必多次查询数据库 我试着用一个方法将它们连接到一个表中,但没有成功。返回的错误如下:Ruby on rails Rails将多个连接合并到一个方法中,ruby-on-rails,ruby,Ruby On Rails,Ruby,我的应用程序中有一个用户,可以有多个评估、计划和资料。在我的数据库中,它们之间已经存在关系。我希望在一个选项卡中显示所有这些,而不必多次查询数据库 我试着用一个方法将它们连接到一个表中,但没有成功。返回的错误如下:未定义的方法“joins”for# 我的最终目标是只记录从联接返回的所有对象,以便可以显示它们,而不是需要查询三个不同的变量,这会减慢我的加载时间。你知道这怎么可能吗 class User < ApplicationRecord has_many :materials, de
未定义的方法“joins”for#
我的最终目标是只记录从联接返回的所有对象,以便可以显示它们,而不是需要查询三个不同的变量,这会减慢我的加载时间。你知道这怎么可能吗
class User < ApplicationRecord
has_many :materials, dependent: :destroy
has_many :plans, dependent: :destroy
has_many :assessments, dependent: :destroy
end
class Material < ApplicationRecord
belongs_to :user
end
class Assessment < ApplicationRecord
belongs_to :user
end
class Plan < ApplicationRecord
belongs_to :user
end
class用户
如果您只想预加载关联,请使用includes
:
class User < ApplicationRecord
# ...
scope :with_library, -> { includes(:materials, :assessments, :plans) }
end
预加载关联后,您可以将其用于库
方法,用特定用户的所有资料、评估和计划填充单个数组:
class User < ApplicationRecord
# ...
def library
[materials, assessments, plans].map(&:to_a).flatten(1)
end
end
更多信息:如果您只想预加载关联,请使用
includes
:
class User < ApplicationRecord
# ...
scope :with_library, -> { includes(:materials, :assessments, :plans) }
end
预加载关联后,您可以将其用于库
方法,用特定用户的所有资料、评估和计划填充单个数组:
class User < ApplicationRecord
# ...
def library
[materials, assessments, plans].map(&:to_a).flatten(1)
end
end
更多信息:首选
包含而不是加入
,除非您有特殊的理由这样做includes
将消除N+1查询,同时仍在关联中构造可用记录:然后可以像其他方式一样循环遍历所有内容
然而,在这种情况下,听起来像是从一个用户
实例开始工作:在这种情况下,包括
(或加入
)并没有真正的帮助——没有需要消除的N+1查询
虽然避免每显示一行(N+1)运行查询很重要,但一个查询和三个查询之间的差异可以忽略不计。(尝试将所有内容压缩在一起会花费更多的开销。)对于这种用法来说,这是不必要的。首选包含而不是连接,除非您有特定的理由这样做includes
将消除N+1查询,同时仍在关联中构造可用记录:然后可以像其他方式一样循环遍历所有内容
然而,在这种情况下,听起来像是从一个用户
实例开始工作:在这种情况下,包括
(或加入
)并没有真正的帮助——没有需要消除的N+1查询
虽然避免每显示一行(N+1)运行查询很重要,但一个查询和三个查询之间的差异可以忽略不计。(将所有东西挤在一起会花费更多的开销。)对于这种用法,它只是不必要的
users = User.all.with_library
users.first.library
# => [ ... ]