Ajax pobieranie danych

Cześć,
z ajax nie miałem nigdy do czynienia i za bardzo nie wiem jak to ugryźć obejrzałem kilka railscast ale nie rozjaśniło mi to mojego problemu.

Powiedzmy że mam dwa check_box jeden to kwiaty drugi to kolory i po zaznaczeniu kwiaty chciał bym wyświetlić rekordy z tabeli kwiaty a jak zaznaczę kolory to pobieram i wyświetlam kolorki. Przy dwóch check_box można sobie poradzić js i ukrywać któregoś z div ale przy kilku już się robi nie ciekawie.

napisałem kawałek kodu jednak nadal mi to nie działa wrzucam to co mam :

item_controller

[code] def edit
@item = Item.all
@color = Color.all
end

def update_color
@color = Color.where(item_id => params[:item_id])
render :partial => “edit_color”, :object => @color
end[/code]
item.js

update_color_div = (item_id) -> jQuery.ajax url: "/update_color" type: "GET" data: item_id: item_id dataType: "html" success: (data) -> jQuery("#versionsDiv").html data
edit_item

[code] <%= select_tag “item_id”, options_from_collection_for_select(@item, “id”, “name”), :prompt => “Select a item”, :onchange => “update_color_div(this.value)” %>

<%= render :partial => 'edit_color', :object => @color %>
[/code] _edit_color [code]<%= select_tag "color_id", options_from_collection_for_select(@color,"id", "name"), :prompt => "Select a color" %>[/code] routes [code]match "/update_color" => "items#update_color"[/code] Po wybraniu itemu nie mam dostępnych kolorów dla danego przedmiotu tylko mam wszystkie przedmioty(Wiem że da się to zrobić bez ajax ale chce się czegoś nowego nauczyć)

CHAOS, cały kod. bo z tego to figę widać,

wrzuć na githuba i daj link

https://github.com/nokimochi/ajax

@update_color_div = (item_id) -> jQuery.ajax url: "/update_color" type: "GET" data: item_id: item_id dataType: "html" success: (data) -> jQuery("#versionsDiv").html data
Jeśli chcesz korzystać z funkcji update_color_div zdefiniowanej w tym pliku to musisz uczynić ją globalną w coffee wygląda to tak jak napisałem wyżej. Jednak lepiej uważać ze wszystkim co globalne. Jeśli chodzi natomiast o samą metodę ustwiającą koloroy jest mały bug

@color = Color.where(item_id => params[:item_id])

item_id powinien być symbolem czyli :tem_id

i jeszcze jeden większy problem: źle korzystasz z partiali tzn. jeśli do partiala o nazwie _edit_color.html.erb odwołujesz się w ten sposób

render :partial => "edit_color", :object => @color

to zmienna przekazana do partiala jest taka jak nazwa partiala czyli edit_color w zwiazku z tym partial powinien wyglądać tak:

<%= select_tag "color_id", options_from_collection_for_select(edit_color,"id", "name"), :prompt => "Select a color" %>

Darowałem sobie komentarze i uwagi nt. semantyczność kodu i dobych praktyk, bo jak rozumiem to poprawisz potem, a teraz chciałeś żeby cokolwiek zaczeło działać.

Wcześniej wypisywały Ci się wszystkie kolory dlatego, że w partialu korzystałeś ze zmniennej @color która w akcji edit była zainicjowana w ten sposób @color = Color.all

Podziękował ślicznie, wszystko działa.