私には 2 つのクラスがlogical_interfaces
ありpop_vlans
、1 対 1 の関係にあります。
表ではlogical_interfaces
、外部キーはの列にvlan_id
関連しています。id
pop_vlans
私のコントローラーでは、sのリストを取得します(次のようにvlan_number
保存されます: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
左側のテーブルで外部キーが参照されていない右側のテーブルからすべてを取得する
テーブルに新しい列を追加して、使用中の場合はフラグとして機能させ、それをクエリの条件として使用する方がずっと簡単かもしれないと考えています。