Rails3 AJAX Ошибка - неопределенный метод `имя_модели 'для Fixnum: Class - PullRequest
0 голосов
/ 25 января 2012

Я получаю следующую ошибку при использовании ползунка jquery ui при обновлении через ajax:

ActionView::Template::Error (undefined method `model_name' for Fixnum:Class):
1: $("#x_stock_list").html("<%= escape_javascript(render(@date_range)) %>");
app/views/home/index.js.erb:1:in`_app_views_home_index_js_erb__1074827181885368454_2504361900'

Моя функция ползунка jquery выглядит следующим образом:

<script type="text/javascript">
$(function() {
    $( "#x_slider" ).slider({
    range: true,
    step: 1,
    min: 1,
    max: 52,
    values: [1, 52 ],
    stop: function(event, ui) {
       var url_param = $('#x_slider').slider('option', 'values');
       $('#x_low_selected').html(ui.value);      
       $.ajax({
         type: "GET",
         data: ({ weeks: url_param[0] }),
         url: $(this).attr('data-href'),
         dataType: 'script'
       });
     }
   });
 });
</script>

В моем домашнем контроллере, У меня есть это:

 def index
    unless params[:weeks]
      @date_range = 4
    else
      @date_range = Home.filter(params[:weeks])
    end
  end

И в моей модели:

  def self.filter(weeks)
    timeago = weeks.to_i
  end 

Наконец, в моем index.js

 $("#x_stock_list").html("<%= escape_javascript(render(@date_range)) %>");

Когда я перетаскиваю ползунок,значение отображается нормально:

 Parameters: {"weeks"=>"8", "_"=>"1327514933685"}

Однако выдает эту ошибку.

Если я вручную перехожу по URL-адресу http://localhost:3000/?weeks=9, все работает нормально.

Можеткто-нибудь объясните, что я здесь делаю не так, пожалуйста?

1 Ответ

4 голосов
/ 25 января 2012

Метод render здесь не обязателен, он предназначен для визуализации частичных файлов, файлов или текста.Вы передаете число 4.

Вам не нужно escape_javascript для числа, так как он ожидает класс, который отвечает на gsub.

#From the above link:    
result = javascript.gsub(%r(\\|<\/|\r\n|\3342\2200\2250|[\n\r"'])/) {|match| JS_ESCAPE_MAP[match] }
javascript.html_safe? ? result.html_safe : result

Либоиспользуйте:

$("#x_stock_list").html("<%= @date_range %>");

Или конвертируйте его в строку:

$("#x_stock_list").html("<%= @date_range.to_s %>");

Для высоких графиков в прошлом я делал что-то вроде:

$.getJSON('traffic_sources.json', null, function(data) {
    pie_chart("traffic_sources_graph", data.traffic_sources);
});

function pie_chart(div, data)
{
   new Highcharts.Chart({
      chart: {
         renderTo: div,
         backgroundColor: '#dddddd'
      },
       series: [{
         type: 'pie',
         name: 'Browser share',
         data: data
      }]
   });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...