Каков наилучший способ дублировать вычисления в Ruby & JavaScript? - PullRequest
0 голосов
/ 27 мая 2009

У меня есть приложение на Ruby on Rails, и мне нужно продублировать некоторые вычисления в 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, когда браузер получает ее. Это выглядит как один, но вокруг него есть двойные кавычки.

Я лаю не на том дереве? У меня такое ощущение, что есть какой-то безумно простой способ сделать это, но я полностью упускаю это. :)

Ответы [ 2 ]

5 голосов
/ 27 мая 2009

Для чего-то тривиально простого, я бы предложил написать чистый JS-файл с функцией и включить ее. Создание JS из ruby ​​для этого звучит как серьезное излишнее убийство. Затем напишите ту же функцию в Ruby.

Если это довольно сложный алгоритм, я бы предложил написать его только на Ruby и создать веб-сервис для вызова из JS.

Редактировать, добавив код, который запутался в моем комментарии ниже:

function calcLetterGrade(score, lowCutoff, hiCutoff) 
{ 
  if( score >= hiCutoff ) { return 'A'; } 
  else if( score >= lowCutoff ) { return 'B'; } 
  else if( score >= 0 ) { return 'F'; } 
  else return ''; 
} 
2 голосов
/ 28 мая 2009

Сделайте это AJAX-вызовом веб-сервера из JavaScript, если это не то, что нужно сделать быстро. С Rails просто позвоните

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

И пусть он отобразит результат в методе контроллера как текст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...