私には3つのモデルがあります-ユーザー。ゲーム、およびアクティビティ。ユーザーがアクティビティレコードを持たないゲームを表示することになっているビューがあります。すでにアクティビティがあるゲームを除外するクエリを作成する方法を理解するのに問題があります。
これらの2つのバージョンを(コントローラーで)実行すると、機能しません(エラーが発生しますundefined method 'game_id' for #<ActiveRecord::Relation:0x69eab40>
)
バージョン1
def index
if current_user
@activities = current_user.activities.game_id
@games = Game.where("id NOT IN (?)", @activities )
end
end
バージョン2
def index
if current_user
@activities = current_user.activities
@activity_ids = @activities.game_id
@games = Game.where("id NOT IN (?)", @activity_ids )
end
end
ただし、これを行うと機能します。コントローラー:
def index
if current_user
@activities = current_user.activities
@games = Game.where("id NOT IN (?)", @activities.collect {|p| p.game_id} )
end
end
それがどれほどスケーラブルかわからないので、私はそれをこのようにすることを心配しています。私はこの[質問]からそれを行うというアイデアを思いつきましたが、回答とともに、このソリューションはスケーラブルではないと人々は言いました(これはその質問者にとっては問題ではありませんでした)。1