1

アクティブなレコードhas_manyアソシエーションを持つことは可能ですか?しかし、私には特定の条件があります。

class Team < AR
  has_many :matches, query: 'team1 == ID or team2 == ID'
end

class Match < AR
  attr_accessible :team1, :team2
end
4

3 に答える 3

4

考えられる解決策は次のとおりです。

class Team < AR
  def matches
    Match.where("team1 = ? or team2 = ?", id, id) # or: { team1: id, team2: id }
  end
end
于 2012-08-12T06:39:31.477 に答える
2

使用することはできますfinder_sqlが、Rails 4では非推奨になり、これを行うための新しい方法があるかどうかはわかりません。

class Team < AR
  has_many :matches, finder_sql: proc { "SELECT * FROM matches WHERE (matches.team1 = #{id} or matches.team2 = #{id})" }
end

別の解決策:

class Team < AR
  has_many :matches_as_team1, class_name: "Match", foreign_key: "team1"
  has_many :matches_as_team2, class_name: "Match", foreign_key: "team2"
  def matches
    matches_as_team1 | matches_as_team2
  end
end

このソリューションでは、の結果はTeam#matchesでなく配列であるRelationため、のようなことはできませんteam.matches.limit(10)

于 2012-08-12T09:04:28.307 に答える
1

関連付けを通常どおりに維持し、後でwhere条件を使用してクエリを適用することをお勧めします。

class Team < AR
  has_many :matches

  scope :team_details, lambda {|id1,id2| matches.where("team1 = ? OR team2 = ?",id1,id2)} 
end

チーム(チームのオブジェクト)

次に電話

team.team_details(id1,id2)
于 2012-08-12T07:40:02.490 に答える