Kategorie+remote_function

Witam,

    mam taki problem. Mam model z nazwami kategorii i chce przy wyborze kategorii uzyć remote_function. Mam 3 select-y w tym po pierwszym wyborze selecta drugi automatycznie za pomoca remote_function usuwa z niego wybrana waratosc aby uniknac powtorzenia. To działa ale nie wiem jak zrobić tak aby przy wyborze drugiej kategorii wartosc w trzecim nie zawierala wartosci z pierwszego i drugiego select-a.

Widok:

[code]


<%= f.label :kategoria_1 %>
<%= collection_select(:firm, :category_ids, @categories, :id, :name, {:prompt => “Wybierz kategorię”}, {:onchange => “#{remote_function(:url => {:controller => “firms”, :action => “update_category_2”},
:with => “‘category_ids_1=’+value”)}”}) %> <%= render :partial => 'select_category_2', :object => @categories %> <%= render :partial => 'select_category_3', :object => @categories %>[/code] Partial _select_category_2 [code]<%= label :firm, :kategoria_2 %> <%= collection_select(:firm, :category_ids, @categories, :id, :name, {:prompt => "Wybierz kategorię"},{:onchange => "#{remote_function(:url => {:controller => "firms", :action => "update_category_3"}, :with => "'category_ids_2='+value")}"})%> [/code] Partial _select_category_3 [code]<%= label :firm, :kategoria_3 %> <%= collection_select(:firm, :category_ids, @categories, :id, :name, {:prompt => "Wybierz kategorię"})%> [/code] update_category_2.rjs [code]page.replace_html('category_2', :partial => 'select_category_2', :object => @categories) page.replace_html('category_3', :partial => 'select_category_3', :object => @categories)[/code] update_category_3.rjs [code]page.replace_html('category_3', :partial => 'select_category_3', :object => @categories)[/code] Kontroler [code]def update_category_2 category_id = params["category_ids_1"] @categories = Category.find(:all, :conditions => ["id not in (?)", category_id]) end def update_category_3 category_id_2 = params["category_ids_2"] @categories = Category.find(:all, :conditions => ["id != ?", category_id_2]) end[/code] Nie wiem jak napisać metodę update_category_3 tak aby zczytywała wartość z pierwszego selecta i wtedy można byłoby napisać odpowiednio zapytanie które zwróciło by mi odpowiedni wynik.

Nie za fajny ten Twój kod albo ja go nie rozumiem. Jeśli używasz Rails 2.3 (a pewnie powinieneś myśląc przyszłościowo) to masz tam coś co się nazywa Nested Object forms http://ryandaigle.com/articles/2009/2/1/what-s-new-in-edge-rails-nested-attributes. Innym sposobem jest użycie wirtualnych atrybutów w modelu, np. definicje:

model.categories= (tablica_id_kategorii)
model.categories --> zwraca tablice id kategorii

i użycie akcji edit/update to zarządzania kategoriami, bez tworzenia oddzielnych akcji. Zazwyczaj (ZAZWYCZAJ) podążanie za Rest-owymi rozwiązaniami jest najlepsze.