On Friday, July 22, 2011 7:12:07 AM UTC-6, Juan Alvarado
wrote:>
> 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).
>
Any reason why you can''t use something like this?
sort_by_name_of = use_business_entity ? :business_associate :
:covered_entity
@breaches = @breaches.joins(sort_by_name_of).order(:name) if sort_by_name
# works in my quick, test rails 3.0.7 app
Is using #joins abhorrent to you?
Also, as an aside, any reason you don''t/can''t put your
"belongs_to :breach"
relationship in your Entity class (since both STI sub-types both have the
relationship of the same name)?
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/rubyonrails-talk/-/5rQrZzvHQ8wJ.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.