Só pra começar, usar has and belongs to many quase sempre não é uma boa idéia, crie um modelo de associação, por que daqui a pouco tu vai querer saber quem associou, desassociou, quando, por que, ...
Mas continuando com o problema, acho que não da para aninhar dois has_many through (ou um has many through com um habtm) então para implementar o que tu quer, só consigo lembrar agora do finder SQL ...
Um exemplo simples, pode ser que tenha algum erro ...
class Group < ActiveRecord::Base
has_many :group_and_things
has_many :properties
end
class GroupAndThing < ActiveRecord::Base
belongs_to :group
belongs_to :thing
end
class Property < ActiveRecord::Base
belongs_to :group
end
class Thing < ActiveRecord::Base
has_many :group_and_things
has_many :groups, :through => :group_and_things
has_many :properties, :class_name => "Property", :finder_sql => 'select p.* ' +
'from properties p ' +
'inner join group_and_things gat on p.group_id = gat.group_id ' +
'where gat.thing_id = #{id} '
end
Com isto thing.properties vai funcionar, mas não vejo problemas em usar a versão com o collect, melhor ainda se colocar em um modulo o groups.collect{|g| g.properties } e passar isto para o extend da associação de grupos, ai fica thing.groups.properties :D
Rodrigo Urubatan Ferreira Jardim
rod...@urubatan.com.brVisite meu blog:
http://www.urubatan.com.brBlog em ingles:
http://www.urubatan.info
Melhor livro de RoR do Brasil:
http://livro.urubatan.com.brJoan Crawford - "I, Joan Crawford, I believe in the dollar. Everything I earn, I spend."