Has_many :through with has_many/has_many join models


#1

It seems that using a join model that joins with two has_many’s will
fail to generate proper SQL

class StudentSemesterRecord < ActiveRecord::Base
belongs_to :semester
has_many :discipline_records, :through => :semester
end

class Semester < ActiveRecord::Base
has_many :student_semester_records
has_many :discipline_records
end

class DisciplineRecord < ActiveRecord::Base
belongs_to :semester
end

student_semester_record.discipline_records yields this SQL:
SELECT discipline_records.* FROM discipline_records INNER JOIN semesters
ON discipline_records.semester_id = semesters.id WHERE
(semesters.semester_id = 1349)

The where clause is invalid. It is using:
semesters.semester_id = #{student_semester_record.id}

It should be using:
semesters.id = #{student_semester_record.semester_id}

Am I doing something wrong, is this a bug, or is this association type
simply not supported?

Thanks!


Jack C.
removed_email_address@domain.invalid


#2

Jack C. wrote:

It seems that using a join model that joins with two has_many’s will
fail to generate proper SQL

class StudentSemesterRecord < ActiveRecord::Base
belongs_to :semester
has_many :discipline_records, :through => :semester
end

class Semester < ActiveRecord::Base
has_many :student_semester_records
has_many :discipline_records
end

class DisciplineRecord < ActiveRecord::Base
belongs_to :semester
end

You can do a has_many :through two ways. One is using a join model with
two belongs_to associations. The other is to go through a model with a
belongs_to and a has_many association. The setup you describe is
interesting, but not currently supported.


Josh S.
http://blog.hasmanythrough.com


#3

Rails mailing list
removed_email_address@domain.invalid
http://lists.rubyonrails.org/mailman/listinfo/rails


#4

Jack C. wrote:


Rails mailing list
removed_email_address@domain.invalid
http://lists.rubyonrails.org/mailman/listinfo/rails

listserv seems to have eaten your reply


Josh S.
http://blog.hasmanythrough.com