1

has_scope を使用して、KeyRoomMapping テーブルを介してルームに接続されていないすべてのキーをフィルタリングしようとしています。

Keys モデルでスコープを作成しましたが、ビューでスコープを呼び出す方法がわかりません。

モデル

class Key < ApplicationRecord  

  has_many :key_room_mappings, foreign_key: :key_id, dependent: :destroy
  has_many :rooms, through: :key_room_mappings

  ###Is this the best way to find all Keys that are not connected to a room?
  scope :without_rooms, -> { where.not(id: KeyRoomMapping.distinct.pluck(:key_id)) }

end

class KeyRoomMapping < ApplicationRecord
  belongs_to :room
  belongs_to :key

end

class Room < ApplicationRecord
  has_many :key_room_mappings, foreign_key: :room_id, dependent: :destroy
  has_many :keys, through: :key_room_mappings

end

コントローラ

class KeysController < ApplicationController

  has_scope :without_rooms

  def index
    @keys = apply_scopes(Key).all
  end

end

意見

###How can I use my scope to filter my list below, this is not working...
<%= link_to "Keys Without Rooms", {controller: 'keys', action: 'index', without_rooms: ''} %>

  <% @keys.each do |key| %>
    <tr>
      <td><%= key.name %></td>
      <td><%= key.copy %></td>
    </tr>
  <% end %>
4

1 に答える 1