2009-05-27 5 views
0

Ich habe eine Ruby on Rails-Anwendung und ich muss einige Berechnungen in Ruby und JavaScript duplizieren. Ruby wird auf der Serverseite verwendet, aber ich muss auch einen Schülergrad im Browser mit JavaScript berechnen.Was ist der beste Weg, um eine Berechnung in Ruby & JavaScript zu duplizieren?

Mein erster Gedanke ist es, eine JavaScript-Funktion mit Strings aufzubauen, sie in JSON zu konvertieren, sie an den Browser zu senden, wo sie dekodiert und als normale JavaScript-Funktion verwendet wird. Klingt das für Sie praktikabel? Ich habe etwas einfaches versucht wie

 
def letterGradeCalc 
    "function calcLetterGrade(score) { 
    if(score >= 90) { return 'A'; } 
    else if(score >= 80) { return 'B'; } 
    else if(score >= 0) { return 'F'; } 
    else return ''; 
    }".to_json 
end 

, aber es ist keine gültige JavaScript-Funktion, wenn der Browser es bekommt. Es sieht irgendwie wie eins aus, aber es hat doppelte Anführungszeichen.

Banne ich hier den falschen Baum? Ich habe das Gefühl, dass es einen wahnsinnig einfachen Weg dafür gibt und ich vermisse es komplett. :)

+1

Ich stimme Marc zu, dass dies irgendwie wie das Drehen Ihrer Räder scheint. Um eine Funktion zu erhalten, müssen Sie lediglich die empfangene Zeichenfolge in Ihrem Javascript auswerten. – Chuck

+0

Ah ha, JavaScript eval funktioniert super. Es stellt sich heraus, dass Sie mit eval nicht nur Daten zurückgeben, sondern auch Funktionen aus Strings erstellen können. Es ist irgendwie klobig und überhaupt nicht Ruby, aber es funktioniert. Danke! –

+0

Wenn Sie einen Rails-Server haben, warum können Sie ihn nicht auf der Serverseite in Ruby schreiben und ihn nur auf der Client-Seite aufrufen? – Zane

Antwort

5

Für etwas trivial einfach so, würde ich vorschlagen, eine reine JS-Datei mit der Funktion zu schreiben und zu integrieren. Das Erzeugen von JS aus Ruby klingt wie ein schwerer Overkill. Dann schreibe die gleiche Funktion in Ruby.

Wenn es ein mäßig komplexer Algorithmus ist, würde ich vorschlagen, es nur in Ruby zu schreiben und einen Web-Service zum Aufruf von JS zu machen.

Bearbeiten, Hinzufügen von Code, der unten in meinem Kommentar mungled wurde:

function calcLetterGrade(score, lowCutoff, hiCutoff) 
{ 
    if(score >= hiCutoff) { return 'A'; } 
    else if(score >= lowCutoff) { return 'B'; } 
    else if(score >= 0) { return 'F'; } 
    else return ''; 
} 
+0

Guter Vorschlag. Die Funktion ist im Allgemeinen nicht komplex (wenn ... dann), aber sie wird mithilfe von Benutzereingaben erstellt. Deshalb glaube ich nicht, dass ich die Funktion vor der Hand aufbauen kann. ? :( –

+0

Erstellen von Benutzereingaben mit Sounds wie das sind nur mir Parameter Funktion calcLetterGrade (score, lowCutoff, hiCutoff) { if (Score> = hiCutoff) {return 'A';.} else if (Score < lowCutoff) {return 'B';} sonst if (Ergebnis> = 0) {return 'F'; else return ''; } –

2

Machen Sie es sich ein AJAX-Aufruf an den Web-Server von JavaScript, wenn es nicht etwas, das schnell getan werden muss. Mit Rails, rufen Sie einfach

remote_function :url => remote_request_url, 
       :update => dom_id_to_update 

Und haben sie das Ergebnis in der Controller-Methode als Text machen.

+0

Noch ein guter Vorschlag, aber ich brauche die UI wirklich schnell zu aktualisieren Benutzer könnte ziemlich schnell Informationen eingeben Ich denke, ein Anruf würde mein System überwältigen. –

Verwandte Themen