3

私は 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

しかし、インスタンス変数をそのままにしておくと、firebug で出力が得られません。ポスト リクエストで、console.logs が正しいフィールド名で生成されることを確認できますが、firebug コンソールには何も表示されません。

1行目を完全に削除すると機能します。

.js.erb ファイル内のいくつかの変数にアクセスできるようにするにはどうすればよいですか?

4

2 に答える 2

6

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');

すべてが期待どおりに機能します。

于 2012-12-07T06:38:05.163 に答える
0

次のような引用符を追加する必要があると思います。

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

しかし、それだけの場合は、firebugでエラーが発生する可能性があります。

于 2012-12-07T06:41:47.757 に答える