Ruby 2.0.0,Rails 4.0.3
当触发年份选择时,JavaScript当前将实例变量(@car)的名称从视图传递给控制器作为字符串。我需要传递对实例变量的引用,而不仅仅是字符串名称。这可能吗?我很感激帮助。
编辑:我已尝试按如下方式更换对汽车的引用,但收到语法错误。
var car = $("#<%= @car %>");
Error: Syntax error, unrecognized expression: #<%= @car %>
观点是:
<div class="span8">
<%= simple_form_for [:admin, @car],
defaults: {label: false},
html: {id: 'new_admin_car', class: 'form-vertical'},
wrapper: :vertical_form,
wrapper_mappings: {
check_boxes: :vertical_radio_and_checkboxes,
radio_buttons: :vertical_radio_and_checkboxes,
file: :vertical_file_input,
boolean: :vertical_boolean
} do |f| %>
<%= f.input(:stock_number, {input_html: {form: 'new_admin_car', car: @car}, autocomplete: :off, placeholder: 'Stock number?'}) %>
<%= f.input(:ymm_year_id, {input_html: {form: 'new_admin_car', car: @car}, collection: YmmYear.all.order("year desc").collect{|c| [c.year, c.id]}, prompt: "Year?"}) %>
<%= render partial: "makes", locals: {form: 'new_admin_car', car: @car} %>
<%= render partial: "models", locals: {form: 'new_admin_car', car: @car} %>
<input type="submit" form="new_admin_car" value="Create Car" class="btn btn-default btn btn-primary">
<% end %>
</div>
当前脚本是:
// 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;
});
答案 0 :(得分:0)
无论如何,所有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输出中,在控制台中输出data
var,以检查它是否为原始字符串,或者它是否为对象。我不记得jQuery是否会自动解析它。如果它是原始字符串,请将其传递给JSON.parse(your_var)
以获得有效对象(as seen here)
答案 1 :(得分:0)
最后,整个概念都是一个坏主意。我问另一个问题提供了一个很好的解决方案。