我有两个班级 -logical_interfaces
并且pop_vlans
是一对一的关系。
在logical_interfaces
表中,外键vlan_id
与 中的id
列相关pop_vlans
。
在我的控制器中,我得到一个vlan_number
s 列表(pop_vlans
像这样存储:
@vlan_numbers = PopVlan.find_all_by_pop_id(@device.pop.id)
(@device.pop.id
是属于的pop
那个pop_vlan
和那个是一样的device
)
然后在我看来,我从这个集合中生成一个选择:
<%= collection_select 'logical_interface', "vlan_id", @vlan_numbers, :id, :vlan_number %>
这一切都很好,但我不想获取所有的vlan_numbers
,只获取表id
中未引用的那些logical_interfaces
。即只有那些尚未使用的号码。
对于这种混乱,我感到非常抱歉,因为这是一个相当冗长的问题,希望能直截了当地提出一些问题。
我认为这可以通过手动 SQL 查询来完成,但我不知道是否有内置的方法允许以“Rails 方式”完成此操作。
我认为 MySQL 会实现相反的效果,SELECT pop_vlans.id, vlan_number FROM pop_vlans
LEFT JOIN logical_interfaces ON logical_interfaces.id = pop_vlans.id
但我实际上无法考虑如何调整该查询以找到vlan_numbers
不匹配的查询。
TLDR
logical_interfaces | pop_vlans
-------------------|-----------
vlan_id-------|----->id
.... | vlan_number
从右表中获取左表中未引用外键的所有内容
我在想,如果它正在使用中,将一个新列添加到表中作为一个标志,并将其用作查询中的条件,它可能会容易得多。