Jak zmienić model aby uzywał innych kluczy

Mam przykładowo modele Chapter->Page->Group,
Group jest rozróźniana nie przez domyślne id ale przez parę chapter_id i page_id (które jest numerem strony, nie jej id)
czy mozna jakoś elegancko zmienić model Page zeby wywolanie page.groups zwracalo odpowiednie grupy używając powyższego klucza ?

próbowałem w kontrolerze używać takiego kodu

[code]@groups = @page.groups.find_all_by_page_id_and_chapter_id(params[:page_id], params[:chapter_id])

dostaję:

SELECT * FROM groups WHERE (groups.chapter_id = ‘5’ AND groups.page_id = ‘1’) AND (groups.page_id = 1)[/code]
czyli szuka po foreing key i po moich warunkach, działa tylko gdy przypadkiem id i page_id jest takie same

dopiero :

@groups = Group.find_all_by_page_id_and_chapter_id(params[:page_id], params[:chapter_id])

daje poprawne rezultaty, ale wtedy cała magia ActiveRecord idzie się … przejść :slight_smile:
przestaje też działać sortowanie które miałem dzięki
has_many :groups, :order => :position w PageController

a nie latwiej to zrobic normalnie

group:
belongs_to page, chapter

page
belongs_to chapter
has_many pages

chapter:
has_many pages
has_many :groups, throght => pages

i wtedy @chapter.page.groups.all(params…)

??

Problem może powodować to że potrzebuje mieć w URLu numer strony (page.position) a nie page.id. Tylko dla pages, dla group id jest ok, ponieważ będą one w URLach tylko w części po zalogowaniu, więc dla googla niedostępnej. Aha, no i fajnie jakby to RESTowo było.
Częściowo udało mi się to zaimplementować, tutaj topic w którym pytałem o to http://rubyonrails.pl/forum/t2392-model-Page-i-urle-z-numerem-strony