Reaching through a belongs_to for acts_as_list scope?


#1

I’m running into a situation where I’d like to provide the list scope
for an acts_as_list model from one step removed. In minimalistic form
(with several other associations removed from each level).

class MainEntity < AcrtiveRecord::Base
has_many :containers
end

class Container < ActiveRecord::Base
has_many :elements
belongs_to :main_entity
end

class Elements < ActiveRecord::Base
belong_to :containers
acts_as_list :scope=> ??? # it wants to be container.main_entity_id
end

Now I’ve thought of two ways to solve this.

  1. add main_entity_id to the Element – this adds a redundant
    link in the DB, and I’d like to avoid that, but if this is the normal
    Rails solution, I guess I can live with it…

  2. Something like
    acts_as_list :scope=>‘container_id IN (#
    {container.main_entity.containers.map { |c| c.id}.join(",")})’

appears to work, but also appears a little cumbersome.

Is there a better way?

Eric