Я работаю над приложением, в котором пользователи могут выбирать элементы, но они не могут выбирать те, которые уже выбраны.
BoardItem имеет board_id и item_id. Элемент, который уже был выбран, не должен быть включен в выбранную коллекцию. Предмет и доска имеют элементы доски.
@board = Board.find(params[:id])
@chosen = BoardItem.select{ |board_item| board_item.board === @board }
@choosing = Item.select{ |item| item.board_items.each do |board_item|
@chosen.exclude?(board_item)
end }
Пожалуйста помогите.





Вы можете исключить выбранные идентификаторы в запросе where следующим образом:
@board = Board.find(params[:id])
selected_item_ids = @board.board_items.pluck(:item_id)
@unselected_items = Item.where.not(id: selected_item_ids)
Слава! Я полностью забыл о @board.board_items и попытался выполнить то же самое с Item.joins(:board_items).where('board_items.board_id = ?', @board.id).
Возможное предложение - если отношения установлены правильно, @board.item_ids должен дать selected_item_ids
да @kiddorails, но он будет получать item_ids через промежуточный запрос board_items, который не нужен.
Вы должны быть в состоянии сделать это с помощью простого запроса, такого как
Item.includes(:board).where(boards: {id: nil })
Возможно, вам придется немного изменить синтаксис ваших моделей.
Цель состоит в том, чтобы загрузить все элементы, за исключением тех, у которых есть существующее отношение.
Большое спасибо, я очень ценю это!
Большое спасибо, это помогает мне полностью :)