Associations that return objects for a particular user

I'm new to Ruby, Rails and this group, so first I'd like to say is hello and thanks for this awesome language, framework, and community.

I have a graph linked by an edge model using has_many :through like the one described here: http://blog.hasmanythrough.com/articles/2006/04/21/self-referential-through

Users habtm Links (directed edges), and vice versa. I have a table links_users. So far this all works fine.

The problem is, I want to be able to say, get all children (neighbors reachable in 1 step from this node) _only through links that belong to a given user_ (typically, the current user).

I wrote some methods on Node like this:

def links_as_parent_for(user)         Link.find(:all,         :joins => "INNER JOIN links_users ON links_users.link_id = links.id",         :conditions => "links_users.user_id = " + user.id.to_s +         " AND links.parent_id = " + self.id.to_s)   end

def children_for(user)       links_as_parent_for(user).collect { |l| l.child } end

This works, but it would be great if this could all act as an association so that, for example, if the objects were already in memory it wouldn't issue an additional SQL query (plus it would be nice to say node.children and get the right results). I don't think that associations can take arguments, but can they check the current user some other way?

Is this possible? Any suggestions?

Thank you for your responses,

Nick Urban