Hi there,
I’ve three tables: release, branch and platform defined as follows:
release (id)
branch (id, release_id)
platform (id)
Associations:
- Each branch belongs to zero or more platforms
- Each platform has zero or more branches
==> To maintain this association, I’ve created the ‘join’ table as
follows:
branches_platforms(branch_id, platform_id)
and in the models,
Branch: has_and_belongs_to :platforms
Platform: has_and_belongs_to :branches - Each branch belongs to exactly one release
- Each release has zero or more branches
==> Release: has_many :branches
Branch : belongs_to :release
Now, if I would like to know the releases a platform supports or the
platforms a release is applicable to, how do I define the
association.
For time-being, I’m using :finder_sql to specificy the complete SQL
query, as shown below. Is there an easy way to specify such an
association? Your help would be very invaluable.
Platform: has_many :releases, :finder_sql => 'SELECT releases.* '+
'FROM releases '+
'INNER JOIN branches '+
'ON releases.id =
branches.release_id '+
'WHERE branches.branch_id '+
'IN (SELECT
branches_platforms.branch_id '+
’ FROM branches_platforms ‘+
’ WHERE
branches_platforms.platform_id= #{id}’
Release: has_many :platforms, :finder_sql => 'SELECT platforms.* '+
'FROM platforms '+
'INNER JOIN branches_platforms
'+
'ON platforms.id =
branches_platforms.platform_id '+
'WHERE
branches_platforms.branch_id '+
'IN (SELECT branches.id '+
’ FROM branches ‘+
’ WHERE branches.release_id=
#{id})’
Thanks in advance.