Rails3 AJAX错误 - Fixnum:Class的未定义方法`model_name'

时间:2012-01-25 18:29:16

标签: ruby-on-rails ruby ajax ruby-on-rails-3 jquery-ui

在通过ajax更新时使用jquery ui滑块时出现以下错误:

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"}

然而它会引发错误。

如果我手动浏览网址http://localhost:3000/?weeks=9,一切正常。

有人可以解释我在这里做错了吗?

1 个答案:

答案 0 :(得分:4)

此处不需要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
      }]
   });
}