Techioz Blog

Rails - スコープ上の論理演算子、それは可能ですか?

概要

2 つのスコープを持つゲーム (試合) を表すクラスがあります。

  scope :home_lineuped, ->() { includes(:home_lineup).where(home_lineup: {lineuped: true }) }
  scope :away_lineuped, ->() { includes(:away_lineup).where(away_lineup: {lineuped: true }) }

結果に対して論理演算子 Not And を使用して新しいスコープを作成したいのですが、可能ですか?

編集: どういう意味ですか?

想像してみろ: Match.All では、ID 1、2、3、4、5、6 の一致が得られます。

Match.home_lineuped では、ID 1、2、6 の一致が得られます。

Match.away_lineuped では、ID 3、4、6 の一致が得られます。

(Match.home_lineuped AND Match.away_lineuped) の結果は次のとおりです: 6。

したがって、Not (Match.home_lineuped AND Match.away_lineuped) の場合、ID: 1、2、3、4、および 5 と一致します。

編集終了

よろしくお願いします、

デビッド

解決策

あなたの意味は、Match.home_lineuped & Match.away_lineuped および Match.all - (Match.home_lineuped & Match.away_lineuped) です。

または、新しいスコープを作成します

スコープ :home_lineuped_and_away_lineuped, ->() { include(:home_lineup, :away_lineup).where(home_lineups: {lineuped: true },away_lineups: {lineuped: true }) }

スコープ :not_home_lineuped_and_away_lineuped, ->() { include(:home_lineup, :away_lineup).where.not(home_lineups: {lineuped: true },away_lineups: {lineuped: true }) }