Forum: Ruby on Rails Help me! ... Problem with associations,

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
A951364eaa0c5e429515da0c6a2e8383?d=identicon&s=25 askme (Guest)
on 2007-03-23 11:50
(Received via mailing list)
Hi there,

 I've three tables: release, branch and platform defined as follows:

  release (id)
  branch (id, release_id)
  platform (id)

 Associations:
 -------------------
   1. Each branch belongs to zero or more platforms
   2. 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
   3. Each branch belongs to exactly one release
   4. 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.
A951364eaa0c5e429515da0c6a2e8383?d=identicon&s=25 askme (Guest)
on 2007-03-24 04:13
(Received via mailing list)
Could someone please help me with this?
E6a1fe85299e663566dd1ea7d4f74e76?d=identicon&s=25 Max Muermann (Guest)
on 2007-09-25 23:02
(Received via mailing list)
On 3/24/07, askme <ChaitanyaPrakash.N@gmail.com> wrote:
>
> Could someone please help me with this?

Have a look at "has_many :through", that should do what you need.

--max
A951364eaa0c5e429515da0c6a2e8383?d=identicon&s=25 askme (Guest)
on 2007-09-25 23:03
(Received via mailing list)
Max,

 thank you very much. I've tried the following,

  In release.rb (model),

   has_many :platforms, :through => :branches

  this results in an error, which asks to specify, :source also (I
doubt this is because platform_id is not present in the branches table
directly!)..

  neither :source => release nor :source => platforms works.

  I'm stuck here!
This topic is locked and can not be replied to.