I need to create the equivalent of a folder system. Each folder can have any model placed into it, including other folders, as long as it is a tree (not a graph, not a partial order.) One idea that looked good is this class Phile acts_as_tree acts_as_list, :scope => :parent belongs_to :philable, :polymorphic => true end So, now I have things that are philes that I can access as a tree and whose kids can be handled as a list. Kewl. Because the belongs_to is in the Philes class, the targets of the :phile polymorphism don''t have any foreign key storage requirements, which is also kewl, since I can refer to any model using this technique. In something that is referred to, the "target" class, we can place a has_one this way... class Whatever has_one :phile, :as => :philable end So now I can access the phile entry. What is missing is this: I want to * issue a find to an instance of a whatever, * use the various scopes of the phile associated with that instance to restrict the search - this means things like direct_children, descendants, full_... etc. * have the conditions in the find apply to the Whatever, not the phile fields. Trying to figure this out has made my head hurt right down to my spleen. I am willing to restrict the search to specific models, although it really shouldn''t matter as long as the fields referenced in conditions are present in all the models. Using :include doesn''t seem to work through polymorph associations. The only thing I can think of is something like this: def alt_find(target_class,relationship,*args) target_class.with_scope( :find => { :conditions => { target_object.philable.send(relationship)) } }) do target_class.find(*args) end end This requires that one specify a single target class in a folder, and takes the relationship like :direct_children as a parameter. It seems like this should be easier in Rails somehow, with some magic proxy class or some such. I have looked around to see if I can find something like this, but can''t seem to find it (although the impenetrable acts_as_taggable might be close.) Anyone know an easier way to do this kind of thing? Ideally, there would be a way to tell ActiveRecord that some other object is responsible for implementing an association for you. With that, one could say things like folder.direct_children.find(:all, ...) Instead of folder.find(Philes.find(w.phile).children.map(&:philable_id), ...) Alternately, is there an implementation of acts_as_tree or others in that ilk for which the scoping methods like direct_children, etc., all of whom take parameters that are then passed to find(), can have the target of the find not be the tree itself but the the polymorphic targets instead? Or, can we simply get "include" to work through polymorphic associations, returning rows that look like STI or other include results, only including all the various models contained? This would require only an addition query to get the :philable_type of each member in the Philable table that are in scope -- the rest could be a SQL query performed on the back end, just as is done for :included associations or STI. Any help appreciated! -ns --~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---