select_tag - jak wziac wybrana wartosc?

Mam nastepujacy kod:

<%= select ( :task, "value", 
             [ [1,1], [3,3], [5,5], [10,10] ], 
             options = { }, 
			 html_options = { :id => "select_#{task.dom_id}", :onChange => remote_function(
		                      :url => { :action => :update, 
			                            :id => task.id, 
			                            :value => ???
			                          } ) } ) %>

Zastanawiam sie jak ustalic :value => ??

Dzieki za sugestie

Pozdrawiam
Lukasz

Obok :url, dorzuć do remote_function

:with => "'value=' + encodeURIComponent( value )"

Strasznie to skomplikowane - tak naprawdę lepiej byłoby pomyśleć jak to zrobić prościej. Nie wiem dokładnie, w jakim to jest kontekście, ale tego typu rzeczy robi się raczej przez observe_field. Zostawiasz selecta w spokoju (bez żadnej obsługi onchange), a później dajesz:

<%= observe_field "id_obserwowanego_pola",  :url => { :action=> 'update' } %>

Nowa wartość pola zostanie automatycznie wysłana jako parametr.

Okey dzieki wielkie :slight_smile:

Co do observera to uzywalem go na poczatku, lecz dziwne rzeczy dzialy sie w roznych przegladarkach oraz wysylal mi sporo requestow (gdy tylko sie zmienia wartosc jeszcze bez klikniecia ).

Uzywalem go dokladnie w taki sposob jak napisales… Nom nic moze sprobuje jeszcze raz z tym ze zmienie :frequency na 2-3 sekundy :slight_smile:

Dzieki jeszcze raz
Pozdrawiam
Lukasz

Hmm akurat mialem chwilke wolna to i tez sprobowalem wrocic do poprzedniej implementacji…

<%= select ( :task, "value", [ [1,1], [3,3], [5,5], [10,10] ], { } )%>
 
<%= observe_field( "task_value",
                     :frequency => 3,
                     :with => "'value='+#{task.value}",
                     :url => { :action => "update", :id => "#{task.id}" } ) %>            

Tylko ze observer zawsze widzi #{task.value}" jako 1 - powod ? To jest wartosc z Bazki dla jakies tam instancji opbiektu task, kompletnie nie rozumiem dlaczego wysyla ta opcje (w HTMLu ta opcja jest selected) wiec moze stad … w takim razie ponawiam moje pytanie jak wziasc wartosc, ktora sobie “wskaze” ??

Dzieki i Pozdrawiam
Lukasz

P.S.
Domyslam sie ze to nie moze byc trudne - pokarzcie mi moj blad w mysleniu :slight_smile:

[quote=luki3k5]Hmm akurat mialem chwilke wolna to i tez sprobowalem wrocic do poprzedniej implementacji…

<%= select ( :task, "value", [ [1,1], [3,3], [5,5], [10,10] ], { } )%>
 
<%= observe_field( "task_value",
                     :frequency => 3,
                     :with => "'value='+#{task.value}",
                     :url => { :action => "update", :id => "#{task.id}" } ) %>            

Tylko ze observer zawsze widzi #{task.value}" jako 1 - powod ? To jest wartosc z Bazki dla jakies tam instancji opbiektu task, kompletnie nie rozumiem dlaczego wysyla ta opcje[/quote]
Zauważ, że #{task.value} jest ewaluowane jeszcze na serwerze, więc nie ma prawa zmienić się w przeglądarce.

Skasuj ten :with.

Napisałem Ci przecież, że przy observe_field nowa wartość pola będzie automatycznie załączona jako parametr. Jeśli chciałbyś to zapisać jawnie, to:

:with => "'value=' + encodeURIComponent( value )"

:with przyjmuje kod JavaScript

Dziala !!! :slight_smile: Super dzieki, widac przekombinowalem …

Mam jeszcze jedno pytanie…
Czy mozna jakos JSem odrazu zmienic wartosc tego selecta ?? chodzi mi o to zeby w htmlu sie zmienilo - poniewaz ja sobie robie RJSowe coda potem z tym i jak mi sie to przenosi miedzy okienkami to trace informacje o tym co bylo wybrane i nadal pamieta mi ta poprzednia wartosc z bazy (dopiero po full refresh pokauje co trzeba)

Pozdrawiam
Lukasz

Mam taki kod w widoku:[code] <% form_for @message, :html => { :multipart => true } do |f| -%>

<% opts_for_ph = User.find(:all, :order => ‘name’, :conditions => [“id_promoter = ?”,current_user.id]).collect {|c| [c.name, c.id]}.unshift([“Wybierz…”, “”])%>

				<label for="id_recepient">Do: </label>
				<%= f.select(:id_recepient,opts_for_ph)%></br></br>
					<label for="subject">Temat:</label></br>
					<%= f.text_field :subject %></br></br>
					<label for="content">Treść:</label><br/>
					<%= f.text_area :content, :size => '30x10' %></br></br>
					Dodaj załącznik: <%= f.file_field :attachment %></br></br>
					<%= submit_tag 'Wyślij' %>

						<% end -%>[/code]

Jak zrobić, aby po naciśnięciu przycisku, wstawiało mi do pola id_recepient w bazie danych, id wybranego usera w select’e. Podkreślam, że jestem początkujący z Rails:)