Rails,将多个复杂的关系存储到单个哈希记录中

时间:2017-03-29 11:38:43

标签: ruby-on-rails hash record

我正在研究铁路协会。

假设,我有一张表有很大关联的表。

Sample.rb

has_many :sample_assoas 
has_many :assoas through: :sample_assoa

has_many :sample_assobs
has_many :assobs through: :sample_assob

has_many :sample_assocs
has_many :assocs through: :sample_assoc

and so on...

在这种情况下,我认为由于关系复杂,过程将非常缓慢。 (因为rails应保持匹配关系以获得结果。)

所以我想,如果我可以将所有关系数据存储到单个哈希以获得更快的结果,那该怎么办呢。

Samples schema 
id :integer 
name :string
hash :something...?

我发现postgresql“hstore”将数据存储在哈希值中。

但以这种方式存储是个好主意吗?

或者你有什么建议吗?

感谢

1 个答案:

答案 0 :(得分:0)

首先,模型可以包含任何数字或关联。它不会影响处理时间。 hstore无法替换关联,两者都用于不同的功能。

关联用于简化查询构建。考虑:

class ModelA < ActiveRecord::Base
  has_many :modelbs
end

class ModelB < ActiveRecord::Base
  belongs :modela
end

您可以找到与ModelA关联的ModelB记录,如下所示:

@modela = ModelA.find(xxx)
@modelbs = ModelB.where(modela_id: @modela.id)

使用关联只需写:

@modela = ModelA.find(xxx)
@modelbs = @modela.modelbs

hstore用于以哈希格式保存值。所以它们不打算用作关联。在大多数情况下,我们不想在所有关联表中保存记录。所以我们应该添加关联。如果在这种情况下使用hstore,则大多数值将设置为nil。

在hstore的情况下,您需要手动迭代哈希以获得所需的结果。