Ruby on rails Rails 4使用来自所有表的数据进行多表联接

Ruby on rails Rails 4使用来自所有表的数据进行多表联接,ruby-on-rails,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby On Rails 4,Activerecord,我觉得这很简单,但我就是不明白。我需要连接3个表,并让rails从所有3个表返回值。我已经完成了一个连接,但是rails只返回1个表中的值。我想我只是不知道语法 这是我的控制器方法 @previous_results = Test.joins(:run, :detail).where("runs.name = ? AND tests.name = ?", @run.name, @test.name).last(1000) 这里是它的sql SELECT `tests`.* FROM `tes

我觉得这很简单,但我就是不明白。我需要连接3个表,并让rails从所有3个表返回值。我已经完成了一个连接,但是rails只返回1个表中的值。我想我只是不知道语法

这是我的控制器方法

@previous_results = Test.joins(:run, :detail).where("runs.name = ? AND tests.name = ?", @run.name, @test.name).last(1000)
这里是它的sql

SELECT  `tests`.* FROM `tests` INNER JOIN `runs` ON `runs`.`id` = `tests`.`run_id` INNER JOIN `details` ON `details`.`test_id` = `tests`.`id` 
WHERE (runs.name = 'SNMSubscriberSpecificTemplatesFeedsTest' AND tests.name = 'testSitePrefixFalseForNTINSequentialList')  ORDER BY `tests`.`id` DESC LIMIT 1000
我需要做的就是从details表返回值。我希望从details中获得2个列值,而不是执行test。*我的返回值是test.id、test.name、detail.text、detail.message

Int active record如何告诉它不仅返回测试表数据,还包括详细的列

SQL中的这个查询实现了我想要的功能,我需要知道如何活动记录它

SELECT  `tests`.*, `details`.`detail_text`, `details`.`detail_error`
FROM `tests` 
INNER JOIN `runs` ON `runs`.`id` = `tests`.`run_id` 
INNER JOIN `details`   ON `tests`.`id` = `details`.`id`
WHERE (runs.name = 'SNMSubscriberSpecificTemplatesFeedsTest' AND tests.name = 'testSitePrefixFalseForNTINSequentialList')
ORDER BY `tests`.`id` DESC LIMIT 1000
您的观点如下:

<table>
  <tr>
    <th>Test ID</th>
    <th>Test Detail's Detail Text</th>
    <th>Test Detail's Detail Error</th>
  </tr>
  <% @tests.each do |test| %>
    <tr>
      <td><%= test.id %></td>
      <td><%= test.detail_text %></td>
      <td><%= test.detail_error %></td>
    </tr>
  <% end %>
</table>
您的观点将类似于:

<table>
  <tr>
    <th>Test ID</th>
    <th>Test Detail's Detail Text</th>
    <th>Test Detail's Detail Error</th>
  </tr>
  <% @tests.each do |test| %>
    <tr>
      <td><%= test.id %></td>
      <td><%= test.detail.detail_text %></td>
      <td><%= test.detail.detal_error %></td>
    </tr>
  <% end %>
</table>

测试ID
测试细节的细节文本
测试细节的细节错误
您的观点如下:

<table>
  <tr>
    <th>Test ID</th>
    <th>Test Detail's Detail Text</th>
    <th>Test Detail's Detail Error</th>
  </tr>
  <% @tests.each do |test| %>
    <tr>
      <td><%= test.id %></td>
      <td><%= test.detail_text %></td>
      <td><%= test.detail_error %></td>
    </tr>
  <% end %>
</table>
您的观点将类似于:

<table>
  <tr>
    <th>Test ID</th>
    <th>Test Detail's Detail Text</th>
    <th>Test Detail's Detail Error</th>
  </tr>
  <% @tests.each do |test| %>
    <tr>
      <td><%= test.id %></td>
      <td><%= test.detail.detail_text %></td>
      <td><%= test.detail.detal_error %></td>
    </tr>
  <% end %>
</table>

测试ID
测试细节的细节文本
测试细节的细节错误

previous_results=Test.joins(:run,:detail)。其中(“runs.name=?AND tests.name=?”、@run.name、@Test.name)。last(1000)将返回大量行。我希望这些行中的每一行都包含来自详细信息表的信息,因此我不确定您的建议是否有效。我的测试表保存了大量测试的通过-失败信息。详细信息表将test.id作为次要关键字,并保存了失败的实际详细信息。所以我想从test中获取信息,并添加test.id的详细信息。如果这有道理的话。然后我将所有这些都加载到一个数据表中以供显示。我将我的答案更新为“包含详细信息”值,这样在加载
详细信息
表值时,它将只有一个查询,而不是多个查询。这就是你想要的吗?也许我只是不明白我道歉。我的视图获取前面的结果变量,并在表中循环。我需要这个var包含两个表中的数据。所以(伪代码)如果“Test”name,id和details“Test id,error msg,error text”我希望以前的_结果有一个Test name,Test id,detail.error msg,detail.error text的列表我刚刚更新了我的答案,包括一个“示例”视图代码,它呈现一个表(根据需要)以前的_结果=Test.joins(:run,:detail)。其中(“runs.name=?和tests.name=?,@run.name,@test.name).最后(1000)将返回许多行我希望这些行中的每一行都包含详细信息表中的信息,因此我不确定您的建议是否有效。我的测试表包含大量测试的通过-失败信息。详细信息表将test.id作为次要关键字,它包含失败的实际详细信息。因此,我希望从测试中获取信息并添加测试的详细信息这个test.id。如果有意义的话。然后我将所有这些加载到一个数据表中进行显示。我将我的答案更新为“包含详细信息”“值,这样在加载
详细信息
表值时,它将只有一个查询,而不是多个查询。这就是你想要的吗?也许我只是不明白我道歉。我的视图获取前面的结果变量,并在表中循环。我需要这个var包含两个表中的数据。所以(伪代码)如果“Test”name,id和details“Test id,error msg,error text”我希望以前的结果有一个Test name,Test id,detail.error msg,detail.error text的列表我刚刚更新了我的答案,包括一个呈现表的“示例”视图代码(根据需要)