Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 带条件的即时加载嵌套关联_Ruby On Rails_Ruby_Activerecord_Rails Activerecord - Fatal编程技术网

Ruby on rails 带条件的即时加载嵌套关联

Ruby on rails 带条件的即时加载嵌套关联,ruby-on-rails,ruby,activerecord,rails-activerecord,Ruby On Rails,Ruby,Activerecord,Rails Activerecord,我认为这比标题可能透露的要简单得多。以下是我的三个关联模型: #app/models/call_service.category.rb class CallServiceCategory < ActiveRecord::Base has_many :call_services end #app/models/call_service.rb class CallService < ActiveRecord::Base belongs_to :call_service_cate

我认为这比标题可能透露的要简单得多。以下是我的三个关联模型:

#app/models/call_service.category.rb
class CallServiceCategory < ActiveRecord::Base
  has_many :call_services
end

#app/models/call_service.rb
class CallService < ActiveRecord::Base
  belongs_to :call_service_category
  has_many :calls
end

#app/models/call.rb
class Call < ActiveRecord::Base
  belongs_to :call_service
end
更新:以前关联不正确。以下是更正后的关联:

#app/models/call_service.category.rb
class CallServiceCategory < ActiveRecord::Base
  has_many :call_services
end

#app/models/call_service.rb
class CallService < ActiveRecord::Base
  belongs_to :call_service_category
  has_many :calls
end

#app/models/call.rb
class Call < ActiveRecord::Base
  belongs_to :call_service
end
有效的初始步骤:
我要做的是只抓取
调用
,其ID在
@call\u ids
中指定。然后,我只想为那些被抓取的
呼叫加载相关的
call\u服务
。以下内容可以很好地做到这一点:

@call_ids = [1,2,3,4]
@calls_by_service = CallService.includes(:calls).where("calls.id IN (?)", @call_ids).references(:calls)
这太棒了。现在,我可以只遍历那些选定的调用“
call\u services
,甚至可以列出每个服务的所有选定调用,如下所示:

<% @calls_by_service.each do |call_service| %>
  <p> <%= call_service.description %> </p>
  <% call_service.calls.each do |call| %>
    <%= call.name %><br>
  <% end %>
<% end %>


这也很好,因为
@calls\u by_service
并不包含所有的
call\u服务
,而是只包含那些与
@call\u id
中指定的
calls\u服务
相关联的
记录。这正是我想要的

更深一层,我遇到了麻烦:
这很好,但我需要更深入一层:我只想显示由
@call\u id
指定的那些所选
呼叫的相关
呼叫服务的相关
呼叫服务类别

换句话说:我只想抓取
@call\u ids
中指定ID的
调用。然后:我只想为那些被抓取的
呼叫加载相关的
呼叫服务
。然后:我只想为那些被抓取的
呼叫加载相关的
呼叫服务\u类别

结构的视觉效果如下所示:

因此,我希望能够遍历那些相关的
呼叫服务类别
(例如:“紧急救援”、“就业”),然后遍历那些
@call\u id
中指定的
呼叫的相关
呼叫服务
,然后显示每个服务的呼叫

我算出了一个级别(通过呼叫服务),现在我只需要算出更深的一个级别(通过呼叫服务类别)

在rails指南中,我尝试查看上的部分。我没有成功,但我认为答案就在那一部分


非常感谢您的帮助。谢谢

其中一个
属于
关联(在
呼叫服务
呼叫
中)实际上应该是一个
有一个
(一对一关系–
一方属于
,另一方
有一个
)。除此之外,您还可以尝试使用以下代码生成带有
left join
s的链式查询,并从所有3个表中检索字段:

CallServiceCategory.includes(call_services: :calls)
                   .where(calls: {id: @call_ids})
                   .references(:call_services, :calls)

我注意到您在
CallServiceCategory
模型上有一个
的关联,但是由于没有
:在
包含中调用服务
,您不能在
引用中引用
CallService
模型中的字段(可以,但它们不会出现在实际的sql查询中).

你试过这样的方法吗:
CallServiceCategory.includes(call\u services::calls)。where(calls:{id:@call\u ids})。references(:call\u services,:calls)
?顺便问一下,没有
的情况下,你如何调用
calls
呢?@potashin拼写错误。我会纠正这些关系,我会试试你的建议。
属于
协会(在
呼叫服务
呼叫
)中的一个应该是一个
有一个
(一对一关系–
一方属于
,另一方属于
),看来我的编辑被拒绝了,所以你必须自己进行编辑。答案中应该有一个
s
:call
上的
s
:call
,包括(call\u services::calls)
。一旦更新,我将接受你的回答。谢谢