如何排除已选择的商品

时间:2019-04-23 19:20:43

标签: ruby-on-rails ruby

我正在开发一个应用程序,用户可以选择项目,但他们不能选择已经选择的项目。

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 }

请帮助我。

2 个答案:

答案 0 :(得分:2)

您可以在where查询中排除以下选定的ID:

@board = Board.find(params[:id])
selected_item_ids = @board.board_items.pluck(:item_id)
@unselected_items = Item.where.not(id: selected_item_ids)

答案 1 :(得分:1)

您应该能够使用简单的查询(例如

)来完成此操作
Item.includes(:board).where(boards: {id: nil })

您可能需要对模型的语法进行一些调整。

目标是加载所有期望具有现有关系的项目