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.