Ruby on rails Postgres/ActiveRecord bug?
我在ActiveRecord中使用了以下方法,并详细介绍了一些简化的类/关联:Ruby on rails Postgres/ActiveRecord bug?,ruby-on-rails,postgresql,activerecord,Ruby On Rails,Postgresql,Activerecord,我在ActiveRecord中使用了以下方法,并详细介绍了一些简化的类/关联: class LineItem < ApplicationRecord has_many :line_item_parts def media best = line_item_parts.detect do |part| part.part.medias.any? end best_media = best && best.part.medias.f
class LineItem < ApplicationRecord
has_many :line_item_parts
def media
best = line_item_parts.detect do |part|
part.part.medias.any?
end
best_media = best && best.part.medias.first
best_media || product.medias.first
end
end
class LineItemPart < ApplicationRecord
belongs_to :line_item
belongs_to :part
end
class Part < ApplicationRecord
belongs_to :product
has_many :medias
end
class Media < ApplicationRecord
belongs_to :product
belongs_to :part, optional: true
end
手动执行查询将返回预期的媒体结果。在第二次运行时,它是相同的查询,但使用AR的缓存
,但在第二次运行时,它返回正确的结果(非nil媒体对象)
这怎么可能?这是一个ActiveRecord错误吗?我甚至不知道从哪里开始用谷歌搜索这样的东西
宝石:
- 轨道(5.1.5)
- pg(0.21.0)
psql(PostgreSQL)10.2(Debian 10.2-1.pgdg90+1)
在Docker for Mac中运行。我没有看到错误,但看起来它仍然会导致几个查询。我可以建议一个替代方案吗
def media
best_media = Media
.joins(parts: [line_item_parts: :line_items])
.where('line_items.id = ?', id)
.first
best_media || product.medias.first
end
如果您想继续直接使用关联,您可以尝试在枚举器方法之前添加。
,以便显式操作结果
def media
best = line_item_parts.to_a.detect do |lip|
lip.part.medias.any?
end
best_media = best && best.part.medias.first
best_media || product.medias.first
end
你能把这些课程贴出来让我们了解所有的东西吗?至少我们需要名字和关系。@JacobVanus完成!很抱歉。你是说LineItemPart
有很多:媒体,通过::part
?@pdobb很好!实际上,我并没有在代码中声明这种关系。我也把其他的关联弄清楚了一点。另外:这只发生在rails服务器的过程中。在rails控制台
中,configuration#media
方法似乎在100%的时间内都能工作(使用相同的配置ID)。
def media
best_media = Media
.joins(parts: [line_item_parts: :line_items])
.where('line_items.id = ?', id)
.first
best_media || product.medias.first
end
def media
best = line_item_parts.to_a.detect do |lip|
lip.part.medias.any?
end
best_media = best && best.part.medias.first
best_media || product.medias.first
end