Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过JavaScript将实例变量从视图传递到控制器_Javascript_Ruby On Rails - Fatal编程技术网

通过JavaScript将实例变量从视图传递到控制器

通过JavaScript将实例变量从视图传递到控制器,javascript,ruby-on-rails,Javascript,Ruby On Rails,Ruby 2.0.0、Rails 4.0.3 触发年份选择时,JavaScript当前将实例变量(@car)的名称作为字符串从视图传递给控制器。我需要传递对实例变量的引用,而不仅仅是字符串名。这可能吗?我很感激你的帮助 编辑:我已尝试按如下方式替换对car的引用,但收到语法错误 var car = $("#<%= @car %>"); Error: Syntax error, unrecognized expression: #<%= @car %> 无论如何,JS可以

Ruby 2.0.0、Rails 4.0.3

触发年份选择时,JavaScript当前将实例变量(@car)的名称作为字符串从视图传递给控制器。我需要传递对实例变量的引用,而不仅仅是字符串名。这可能吗?我很感激你的帮助

编辑:我已尝试按如下方式替换对car的引用,但收到语法错误

var car = $("#<%= @car %>");
Error: Syntax error, unrecognized expression: #<%= @car %>

无论如何,JS可以发送/接收的都是字符串。回答POST调用时,需要用JSON对@car对象进行编码,并在回调函数中对其进行解析

在控制器中:

@car = {} # do whatever you have to do to find the corresponding car
respond_to do |format|
  format.html
  format.json { render :json => @car.to_json }
end
在您看来,不要忘记在POST请求中调用的路径末尾添加一个
.json
。在这种情况下,我认为应该是
/admin/cars/make_list.json
,但您可能需要进行调整


然后在JS中,在控制台中输出
数据
变量,检查它是原始字符串还是对象。我不记得jQuery是否自动解析它。如果它是一个原始字符串,请将其传递给
JSON.parse(您的变量)
以获得一个有效的对象()

,最后,整个概念是一个坏主意。我问了另一个问题,提供了一个很好的解决方案


您的意思是将var从控制器传递到视图?还是在JS中进行GET调用?@car通过正常方法从控制器进入视图。当年份发生变化时,JS激发并将所选年份传递回控制器,以便它可以为该年份生成品牌列表。我需要在启动时通过JavaScript将car实例从视图传回控制器。@aryes我认为我的评论是错误的。见上文。我详细说明了我的答案,见上文
// when the #year field changes
$("#car_ymm_year_id").change(function () {
    // make a GET call and replace the content
    // First select identifies what has been selected, or fired
    var year = $('select#car_ymm_year_id :selected').val();
    // Pull the variables from the input_html tag
    var form = $('select#car_ymm_year_id').attr("form");
    var car  = $('select#car_ymm_year_id').attr("car");
    // Routes to the controller action
    $.post('/admin/cars/make_list/',
        {
            form: form,
            year: year,
            car: car
        },
        function (data) {
            $("#car_ymm_make_id").html(data);
        });
    return false;
});
@car = {} # do whatever you have to do to find the corresponding car
respond_to do |format|
  format.html
  format.json { render :json => @car.to_json }
end