通过JavaScript将实例变量从视图传递到控制器
Ruby 2.0.0、Rails 4.0.3 触发年份选择时,JavaScript当前将实例变量(@car)的名称作为字符串从视图传递给控制器。我需要传递对实例变量的引用,而不仅仅是字符串名。这可能吗?我很感激你的帮助 编辑:我已尝试按如下方式替换对car的引用,但收到语法错误通过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可以
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