2011-01-19 1 views
5

Ho due domande.onchange remote_function in rails 3 - è valido? come posso farlo discretamente?

Ho un tag select in un'applicazione Rails 3 che assomiglia a questo:

<%= select(@adverse_event_template_settings, 
    "display_arms", 
    options_for_select([["Yes", true], ["No", false]]), 
    { :selected => :display_arms }, 
    :onchange => remote_function(:update => "display_arms", 
      :method => "put", 
      :with => "'display_arms=' + value", 
      :url => { :controller => :adverse_event_template_settings, 
       :action => :update, :id => @aets.id})) %> 

Questo non fa quello che io voglio che DO- che è, chiamare un'azione di controllo quando il valore cambia selezionare scatola.

Anche se questo funziona, voglio sapere 1) È valido in rotaie 3? So che è invadente javascript, ma remote_function funziona in rails 3 mi sembra strano - c'è qualcosa di sbagliato qui?

e se quanto sopra NON è valido, mi piacerebbe davvero davvero sapere 2) come posso compiere questa stessa azione (cioè chiamare la stessa azione nello stesso controller) in modo discreto? C'è un modo per farlo in modo semplice e pulito nei binari 3? Ho disperatamente bisogno di aiuto per la codifica con questa parte.

Grazie mille! Fatemi sapere se avete bisogno di maggiori dettagli.

risposta

7

(presumo che si stia utilizzando jQuery).

Inserisco la parte javascript in un file .js e gestisco l'evento onchange con jQuery.

<%= select(@adverse_event_template_settings, 
    "display_arms", 
    options_for_select([["Yes", true], ["No", false]]), 
    { :selected => :display_arms }) %> 

e nel file js:

$(document).ready(function() { 

    $('#display_arms').change(function(){ 
     $.ajax({url: 'YOUR URL', 
     data: 'display_arms=' + value, 
     success: function(data){ 
      $('#display_arms').html(data); 
      } 
     }) 
    }); 
    }); 

(non ho avuto tempo di provare questo, ma si ottiene l'idea)

Per essere onesti, io non sono sicuro che ci sia un modo per fare questo genere di cose discretamente (o mi interessa!).

+1

Questo * è * il modo di farlo in modo discreto. – Confusion