2016-03-26 5 views
0

Ich bin ziemlich neu zu Rubin auf Schienen ... Auf meinem _form.html.erb Ich habe ein collection_select Feld, das von einem Modell namens Produkt bevölkert ist. Die Tabellenspalten des Produkts lauten id, name, and price. Sobald ich einen Artikel (Produkt) aus der Sammlung ausgewählt habe, möchte ich ein Textfeld mit dem Preis des ausgewählten Produkts ausfüllen.Wie rufe ich eine Ruby-Methode auf, wenn: onchange-Event ausgelöst wird (Ruby auf Rails 4)?

Bisher habe ich den folgenden Code IOT ein Ereignis auslösen, wenn ein Element auswählen:

<%= collection_select(:warehouse, :product_id, Product.all, :id, :name, {}, {:onchange => "alert('Hello World');"})%> 

Wie kann ich ein Rubin-Methode aufrufen, die mir die text_field mit dem entsprechenden Preis für das ausgewählte Produkt füllen lassen würde?

Für die Methode, die ich so etwas wie ...

def set_price 
     @price = Product.find(params[:id]).price 
end 

Antwort

0

Das erb-Schnipsel zu denken war

<%= collection_select(:warehouse, :product_id, Product.all, :id, :name, {}, {:onchange => "alert('Hello World');"})%> 

erzeugt die HTML-

<select name="warehouse[product_id]" onchange="alert('Hello World');"> 
    <option value="1">Product 1</option> 
    <option value="2">Product 2</option> 
    ... 
</select> 

So der Inhalt onchange ähnliche Schnipsel ist nur ein Stück Javascript, das auf Browsern läuft. Es gibt keine Möglichkeit, onchange Ruby-Code direkt ausführen zu lassen. Sie können lediglich eine AJAX-Anforderung in onchange senden und Ihre Rails-Anwendung auf diese Anfrage reagieren lassen.

+0

Gibt es eine andere Möglichkeit, dies ohne AJAX durchzuführen. In C# war ich in der Lage, diese Aufgabe zu erledigen, indem ich die Controls-Ereignisse durch Callbacks behandelte. Ist es möglich, die collection_select-Ereignisse durch Rückrufe in Ruby zu behandeln? Wenn nicht, was ist die beste Praxis, um das Erforderliche zu erreichen? –

+0

'ASP.net' Callback-System basiert auf AJAX auch (wenn Sie Javascript als Ihre Client-Seite Skriptsprache wählen). Weitere Informationen finden Sie unter [https://msdn.microsoft.com/en-us/library/ms178208.aspx](https://msdn.microsoft.com/en-us/library/ms178208.aspx]. – Aetherus

+0

Sie haben absolut Recht. Ich werde diesen Ansatz versuchen. Vielen Dank für Ihre Hilfe Aetherus –

Verwandte Themen