Problem z form_for

<% form_for :place do |form| %>
<%=form.select(nil ,@places)%>
<%= submit_tag “Add”, :class => “submit” %>
<% end %>

Problem polega na tym ze mam 3 listy. Pierwsza wyswietla to co mam w zmiennej @places jak widac powyzej.
Gdy klikne Add to w kontrolerze wywoluje mi sie kod ktory zmienia mi zawartosc kolejnej listy.

Pytanie: Jak to wywolac bez klikania, czyli poprostu poprzez wybranie jednej z pozycji listy @places.

dziekuje za uwage i czekam na podpowiedzi

Możesz to ładnie i czysto w Railsach AJAXowo zrobić - zainteresuj się (w dokumentacji RoR) tagiem observe_field.

Nie wiem czy jest sens używać tutaj observe_field.

W tym przypadku ja bym ustawił po prostu zdarzenie onchange. Czyli w prototype jakoś tak:

Event.observe(window, 'load', function() { Event.observe('places', 'change', function () { $$('form')[0].submit(); }); });
powyższy kod działa w założeniu, że select ma id=“places”. Po zmianie wartości forma zostanie wysłana (jak masz więcej form musisz dodać im jakieś id/klasy i odpowiednio zmodyfikować $$). Można pewnie to zrobić jakimiś helperami w railsach - jeżeli tak wolisz przejrzyj dokumentację.

Oczywiście ładniej byłoby to zrobić w ajaxie - ale to już trochę więcej.

Swoją drogą ja olałem już dawno helpery do prototype’a - http://blog.drogomir.com/articles/2007/12/25/nieinwazyjny-javascript-razem-z-ruby-on-rails

NO ze Ajax sobie z tym poradzi to wiem tyle ze implementacje tego zostawiam sobie na pozniej narazie chce zeby z bazami wszystko zadzialalo jak trzeba.
Myslalem ze moze istnieje cos w stylu submit_tag tyle ze dzialajace w ten sposob jak pisalem wczesniej. Jesli nie, to trudno zostawie jak jest i w drugiej czesci sprobuje z Ajaxem.
Jesli ktos ma jeszcze jakies pomysly to zapraszam do postowania
Pozdrawiam

EDIT
NIe ma czegos w stylu

<%= onchange :class => “submit” %>

:wink: to by zdecydowanie ulatwilo sprawe :wink:

Właściwie to tak się przyzwyczaiłem do zdarzeń, że nie pomyślałem jak to kiedyś robiłem :wink:

Jeżeli chcesz to wstawić w railsach, a nie w JS, to możesz jeszcze zrobić coś takiego:

  f.select(nil, @places, {}, :onchange => "$$('form').submit()")

Jak napisałeś to <%= onchange… %>, to się spostrzegłem, że takie rzeczy, to tylko w erze. Albo w jakimś pluginie z helperami do zdarzeń. :slight_smile:

<% form_for :place do |form| %>
<%= form.select(nil ,@places, {}, :onchange => “$$(‘form’).submit()” ) %>
<%= submit_tag “Add”, :class => “submit” %>
<% end %>

czy to powinno dzialac samo z siebie czy trzeba cos, gdzies dopisac, dolaczyc?

Jak zmienie wartosc listy to nic sie nie dzieje, jesli klikne add to ladnie zmieniaja mi sie wartosci w kolejnej liscie.
Chyba jednak zostaje poszperac o observe_field. Mimo wszystko wielkie dzieki za pomoc Drogus

Powinno działać o ile masz nowego prototype’a. Jeżeli starego jakiegoś, to takie coś powinno:

<% form_for(:place, :html=> {:id => 'form'}) do |form| %> <%= form.select(nil ,@places, {}, :onchange => "$('form').submit()" ) %> <%= submit_tag "Add", :class => "submit" %> <% end %>
Najlepiej zainstaluj sobie firebuga i zobacz jaki błąd Ci wyskakuje w razie czego. To powyżej sprawdziłem na starym prototype i działa. :slight_smile:

No to co podales dziala ale tylko w browserze aptany. Jesli wstukam to w opere czy firefoxa to niestety to onchange nie zaskakuje. W tej chwili wzialem sie za dalsze rozwijanie mojego serwisu. Do tego wroce jak cala reszta bedzie w miara dzialac. A tak w sumie to dziwne ze dziala w aptanie a w przegladarce nie…
wilekie dzieki za pomoc