打印连接表中没有的内容

时间:2017-02-20 20:08:52

标签: ruby-on-rails ruby join

我有一个从其他2个表创建的连接表。

假设一个模型叫做cat,另一个叫做request,连接表叫做catrequest(这个表有cat_id和request_id)

如何打印未在连接表中交叉的所有猫,即未使用rails请求的所有猫。我看到了一些基于数据库的答案,但我正在寻找使用ruby代码的rails解决方案。

我知道如何打印属于请求的猫,即:

<% @requests.each do |request| %>
  <% request.cats.each do |cat| %>
    <%= cat.name %>
<% end %>

但我不明白如何反过来。

2 个答案:

答案 0 :(得分:4)

要获取从未被请求过的猫的列表,请使用:

Cat.includes(:cat_requests).where(cat_requests: { id: nil })
# or, if `cat_requests` table does not have primary key (id):
Cat.includes(:cat_requests).where(cat_requests: { cat_id: nil })

以上假设您拥有相应的关联:

class Cat
  has_many :cat_requests
end

答案 1 :(得分:2)

听起来你需要的是一个外连接,然后稀释那些没有相应数据的猫行?如果是这种情况,您可以考虑使用Arel。它支持外连接,可能用于获取您正在寻找的内容。以下是指南的链接,其中包含有关Arel的大量有用信息:

http://jpospisil.com/2014/06/16/the-definitive-guide-to-arel-the-sql-manager-for-ruby.html

在页面中搜索&#34; The More the Merrier&#34;讨论连接的部分。