繁体   English   中英

Rails无法访问.js.erb文件中的实例变量

[英]Rails unable to access instance variable in .js.erb file

我正在发出一个ajax请求,当它完成时,我试图在页面上添加一个div。 由于某种原因,我无法在.js.erb文件中获取实例变量。

我有被称为此控制器方法

 # PUT /applications/1
  # PUT /applications/1.json
  def update
    @application = Application.find(params[:id])
    @current_app = params[:application]
    @curr_app_id = params[:id]
    @current_app.values.each do |key, val|
        key.values.each do |k,v|
            @curr_app_field_name = k[:field_name]
            @curr_app_field_value = k[:field_type]
        end
    end

    respond_to do |format|
      if @application.update_attributes(params[:application])
        format.html { redirect_to @application, notice: 'Application was successfully updated.' }
        format.json { head :no_content }
        format.js
      else
        format.html { render action: "edit" }
        format.json { render json: @application.errors, status: :unprocessable_entity }
        format.js
      end
    end
  end

呈现此.js.erb文件

console.log('name = '+<%= escape_javascript @curr_app_field_name %>); // line 1
console.log('test'); // line 2

但是当我将实例变量留在那里时,我在萤火虫中没有任何输出。 我可以在发布请求中看到使用正确的字段名生成console.logs,但是在firebug控制台中什么也没有出现。

如果我完全删除第1行,它会工作。

我该如何做才能访问.js.erb文件中的一些变量?

您混用了Javascript和Ruby。

代替:

console.log('name = '+<%= escape_javascript @curr_app_field_name %>);

您必须这样做:

console.log('name = <%= escape_javascript @curr_app_field_name %>');

说明:

假设@curr_app_field_name == 'foo'那么您当前的代码将计算为:

console.log('name = '+foo);

但是变量foo不存在,因此将引发错误。 如果您这样做,我建议它将评估为:

console.log('name = foo');

一切都会按预期进行。

我认为您必须添加这样的报价:

console.log('name = '+ "<%= escape_javascript @curr_app_field_name %>");

但是,仅仅是因为您可能在萤火虫中出错。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM