2017-12-26 10 views
0

Ich versuche, den Wert aus einem Dropdown zu erhalten, setzen Sie es gleich einer lokalen Variablen und zeigen Sie es an. Alle Tutorials, die ich gefunden habe, verwenden die Post-Methode, um den Wert in einer Datenbank zu speichern.Ruby on Rails setzen lokale Variable aus Drop-down

Ist es für mich möglich, eine lokale Variable festzulegen, die dem entspricht, was der Benutzer im Dropdown-Menü auswählt?

Hier einige Beispiel-Code, den ich versuche zu tun, zeigt, was, ich weiß nur nicht, wie das ausgewählte Drop-Down-Wert gleich der Variablen Alter setzen ...

<% year = 2017 %> 
<p>What is your age?</p> 
<%= select_tag "my_age", raw("<option>1</option><option>2</option><option>3</option>") %> 
<% birth_year = year - age %> 
<%= puts "You were born in #{birth_year}" %> 

Antwort

0

Basierend auf, wie Sie haben Ihre Frage geschrieben, es klingt, als würden Sie eine Lösung suchen, die etwas JavaScript verwendet. Ruby wird auf dem Server ausgeführt. Wenn Sie möchten, dass Ihr Server weiß, was der Benutzer ausgewählt hat, müssen Sie Daten an Ihren Server senden. Deshalb haben die anderen Tutorials POST Daten zum Server gelesen.

Hier ist ein Weg, dies mit ein wenig JavaScript tun könnte:

const year = 2017 
const my_age = document.getElementById("my_age") 

my_age.addEventListener("change", (evt) => { 
    const age = evt.target.value 
    const birth_year = year - age 
    console.log("You were born in " + birth_year) 
}) 
0

Da Sie über lokale Variable sprechen sie nur in einem Fall Anruf leben wird. Mit dem Sprichwort bedeutet dies, dass die Variable, die Sie verwenden möchten, einmal vor dem Aufruf der Ansicht gerendert wird.
Das Dropdown-Feld, auf das Sie sich beziehen, ist ein Formularelement, das durch das Formular submit übergeben werden soll. Daher sollte es jedes Mal neu geladen werden, wenn Sie möchten, ändern birth_year. Wenn Sie GET oder POST in diesem Fall verwenden, ist das kein anderer Ansatz.

In einer Ansicht:

<%= form_tag("/myaction", method: "get") do %> 
    <p>What is your age?</p> 
    <%= select_tag "my_age", raw("<option>1</option><option>2</option>   
    <option>3</option>") %> 
    <%= puts "You were born in #{@birth_year}" %> 
<% end %> 

In einem Controller:

def myaction 
    year = Date.today.year 
    age = params[:my_age] 
    @birth_year = year - age 
end 

Auf der anderen Seite, wenn Sie Variable in so schnell wie in Client-Seite (Frontend) zu verwenden, planen Sie brauchen Setzen Sie den Wert in Javascript oder anderen clientseitigen Frameworks, die Sie verwenden.