【发布时间】:2013-04-04 21:15:53
【问题描述】:
好的,这就是我遇到的问题。我有一个模型,它在直通表中的条件上设置了两个关系。
has_one :link_resource, through: :resource_contexts, source: :resource, conditions: ['resource_contexts.question_id = ? ', -1]
has_many :sample_plans, through: :resource_contexts, source: :resource, conditions: ['resource_contexts.question_id = ? ', -2]
然后,在我的控制器中,我尝试使用
@funder_templates = FunderTemplate.find(:all, include: [:sample_plans, :link_resource], conditions: {active: true})
但是由于某种原因,sql出来是这样的
ResourceContext Load (0.2ms) SELECT `resource_contexts`.* FROM `resource_contexts` WHERE (`resource_contexts`.funder_template_id IN (2,3,4,5,6,7,8,9,10,11,12,13,14,20,21,22,23,24,25,26,27,30,40) AND (resource_contexts.question_id = -2 ))
请注意,它只查找第一个关系的条件,而不是第二个。我不知道我正在做的事情是否太复杂以至于 ActiveRecord 无法处理,或者我只是写错了。任何帮助将不胜感激。
Rails 3.0.20
Ruby 1.9.2
编辑:澄清一下,真正搞砸的部分是@funder_templates.sample_plans 是正确的,但@funder_templates.link_resource 也是示例计划!没有包含,关系工作正常,只是没有优化。
【问题讨论】:
-
你写
include: [:sample_plans, :link_resource]- 这些都是关系。 -
@Mik_Die 这不是我写的吗?
-
如果你想尝试使用更新的语法...
@funder_templates = FunderTemplate.all.includes([:sample_plans, :link_resource]).where(:active => true) -
@depa 我试过 funder_templates = FunderTemplate.includes([:link_resource, :sample_plans]).where(active: true) 但同样的问题发生了。 funder_templates.sample_plans 和funder_templates.link_resource 都是sample_plans。由于某种原因,它只是没有得到第二个包含关系。
-
你也有
has_many :resource_contexts行吗?你应该。
标签: sql ruby-on-rails ruby ruby-on-rails-3 rails-activerecord