我有一个从其他2个表创建的连接表。
假设一个模型叫做cat,另一个叫做request,连接表叫做catrequest(这个表有cat_id和request_id)
如何打印未在连接表中交叉的所有猫,即未使用rails请求的所有猫。我看到了一些基于数据库的答案,但我正在寻找使用ruby代码的rails解决方案。
我知道如何打印属于请求的猫,即:
<% @requests.each do |request| %>
<% request.cats.each do |cat| %>
<%= cat.name %>
<% end %>
但我不明白如何反过来。
答案 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;讨论连接的部分。