在Ruby和JavaScript中复制计算的最佳方式是什么?

问题描述:

我有一个Ruby on Rails应用程序,我需要在Ruby和JavaScript中复制一些计算。 Ruby用在服务器端,但我也需要使用JavaScript在浏览器上计算学生成绩。在Ruby和JavaScript中复制计算的最佳方式是什么?

我的第一个想法是使用字符串构建JavaScript函数,将其转换为JSON,并将其发送到浏览器,并在其中解码并用作普通的JavaScript函数。这听起来对你有用吗?我试过一些简单的东西,比如

 
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 

但是当浏览器得到它时它不是一个有效的JavaScript函数。它看起来像一个,但它有双引号。

我在这儿吠错了树吗?我觉得有一些非常简单的方法来做到这一点,但我完全错过了它。 :)

+1

我同意Marc的说法,这看起来有点像旋转你的*。但要获得一个函数,你只需要在你的Javascript中评估收到的字符串。 – Chuck 2009-05-27 19:58:27

+0

啊哈,JavaScript eval很棒。事实证明,您可以使用eval不仅返回数据,而且还可以从字符串构建函数。它有点笨重,根本不是Rubyish,但它的工作原理。感谢名单! – 2009-05-28 14:47:23

+0

如果你有一个Rails服务器,为什么你不能在服务器端用ruby写它,然后在客户端调用它? – Zane 2012-10-24 15:34:08

对于像这样简单的事情,我会建议编写一个纯JS文件的功能,并包括它。从ruby生成JS听起来像是严重的矫枉过正。然后在Ruby中编写相同的函数。

如果这是一个适度复杂的算法,我建议只写在Ruby中,并使一个Web服务从JS调用。

编辑,并称得到了在下面我的评论mungled代码:

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

让它从JavaScript的AJAX调用Web服务器,如果它不是一个需要快速完成。使用Rails,只需拨打

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

并让它在控制器方法中将结果呈现为文本。