acts_as_tree/ancestry/closure_tree i has_many through

Więc tak, mam 2 modele: User i Contract. User używa closure_tree (api podobne do acts_as_tree itp) więc ma #self_and_descendants które zwraca jego, jego dzieci, wnuki itd. Chciałbym móc zrobić User#contracts, które zwróci mi jego kontrakty oraz kontrakty jego dzieci, wnuków itd.

Narazie udało mi się zrobić coś takiego:

[code=ruby]class User < ActiveRecord::Base
acts_as_tree

has_many :contracts, finder_sql: proc {
Contract.where(user_id: self_and_descendants.select(:id))
}
end

class Contract < ActiveRecord::Base
belongs_to :user
end[/code]
to działa prawie dobrze, bo User#contracts zwraca to co powinno. Problem pojawia się gdy chcę np. User#contracts.where(foo: :bar), bo wtedy generowany jest normalny (SELECT * FROM contracts WHERE user_id = id) sql a nie ten zdefiniowany w finder_sql.

użyj awesome nested set.

A bezpośrednio problem powinno rozwiązać

def contracts
Contract.where(user_id: self_and_descendants.select(:id))
end

zamiast has_many

no tak, czegoś takiego używałem, ale wtedy znowu nie działa contracts#new. to znaczy działa, ale nie przypisuje dobrego user_id (no bo i skąd miałoby je znać ;))

co pomoże użycie awesome_nested_set?