アクティブなレコードhas_manyアソシエーションを持つことは可能ですか?しかし、私には特定の条件があります。
class Team < AR
has_many :matches, query: 'team1 == ID or team2 == ID'
end
class Match < AR
attr_accessible :team1, :team2
end
アクティブなレコードhas_manyアソシエーションを持つことは可能ですか?しかし、私には特定の条件があります。
class Team < AR
has_many :matches, query: 'team1 == ID or team2 == ID'
end
class Match < AR
attr_accessible :team1, :team2
end
考えられる解決策は次のとおりです。
class Team < AR
def matches
Match.where("team1 = ? or team2 = ?", id, id) # or: { team1: id, team2: id }
end
end
使用することはできます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)
。
関連付けを通常どおりに維持し、後で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)