I have 2 models set up using single table inheritance (STI) with belongs_to 
relationships to a third model.  

class CoveredEntity < Entity
        belongs_to :breach
                ...
end

class BusinessAssociate < Entity
        belongs_to :breach
                ...
end

class Breach < ActiveRecord::Base
        has_one :covered_entity
        has_one :business_associate
end


In my index view for breaches controller I am displaying the 
covered_entity.name and the business_associate.name (if it exists).  I want to 
allow the users to sort the index table by either of these values; however, 
since they use STI and are the same table, just doing 
@breaches.includes(:covered_entity).includes(:business_associate).order("#{sort_column}
 #{sort_direction}") does not work.  

I can get around this by using .joins("inner join (select * from entities where 
entities.type = 'CoveredEntity') as covered_entities left join (select * from 
entities where entities.type = 'BusinessAssociate') as business_associates) and 
then I am able to use .order("business_associate.name") or 
.order("covered_entities.name") and get the desired results.

I was curious if there is another way to do this that would not require me to 
write out the joins by hand ( passing an alias to association or includes for 
example).

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to