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.