6

レンダリングされたページのjavascriptに渡すルビ(変数とオブジェクト/ハッシュ)の値があります。現在、これらのメソッドを使用して、クライアント側で変数を宣言するためのjavascriptを記述しています。複数のレール変数をjavascriptに渡す

def declare_as_js_vars vars 
    string = "" 
    vars.each do |name, value| 
     string += self.declare_as_js_var(name, value) 
    end 
    string 
    end 

    def declare_as_js_var name, value 
    name.to_s + "='" + value.to_s + "';" 
    end 

ここで問題となるのは、オブジェクトを宣言できず、個別に変数を宣言する必要があることです。私はこれが簡単にこれを行うためにレールに何か方法があるかどうか疑問に思っていました。

変数とオブジェクトをjavascriptに渡す方法はありますか?私は仕事を得るためにタイプJSONのスクリプトタグを使用したい)

+0

関連:stackoverflow.com/questions/2464966/passing-ruby-variables- to-javascript-function-in-rails-view –

答えて

0

あなたはobjects.to_jsonで動作するように試してみてくださいを入力してください。これはグローバルな名前空間を汚染することを避け、RailsはオブジェクトをJSONにシリアル化するための大きなサポートを持っています。

あなたが見るに、このようなものを使用することがあります:

<script id="my_vars_json" type="text/json"> 
    <%= @my_vars.to_json %> 
</script> 

その後、それはあなた次第ですがJavaScriptでJSONをパースします。私はjQueryを使いたい:

$(function() { 

    var myVarsJSON = $("#my_vars_json").html(), 
     myVars  = $.parseJSON(myVarsJSON); 

    console.log(myVars); 

}); 

8

、いくつかの構文例たぶん

+2

'@ my_vars'がデータベースの複数のエンティティを表すとき、このアプローチに問題がありました(MyVarがモデルであるコントローラの@my_vars = MyVar.allなど)。 '<%= raw @ my_vars.to_json%> 'を使用して問題を改善しました。あなたの答えをありがとう、それは助けになった! –

10

もう少し遅いですが、他の人に役立つかもしれません。 gonという素晴らしい宝石があります。これは、レールからjavascriptに変数を渡す際に非常に便利です。オブジェクト全体を送信することもできます。あなたはこの

@your_int = 123 
@your_array = [1,2] 
@your_hash = {'a' => 1, 'b' => 2} 
gon.your_int = @your_int 
gon.your_other_int = 345 + gon.your_int 
gon.your_array = @your_array 
gon.your_array << gon.your_int 
gon.your_hash = @your_hash 
gon.your_object = Table.find(params[:id]) 

のようなものを持つことができ、コントローラで

その後、JavaScriptでそれはそれについてrailscastもあり

alert(gon.your_int) 
alert(gon.your_other_int) 
alert(gon.your_array) 
alert(gon.your_hash) 
alert(gon.your_object.name) 

のように利用できるようになります。

1

私はGon gemを使用することが最適な解決策になると思います。 これをチェックアウトするvideo casts

0

私はそれが宝玉client variable、それは有望そうだと分かった。あなたの設定と変数はクライアントに渡され、クライアントに簡単に渡すことができます。

2

私はデータベースからユーザのファーストネームを取得し、その値をJSON形式のjavascript変数に渡す必要がありました。

私はその後

var tokenList = <%= @token.html_safe %> 
0

を取る、私は次の行を使用し、erbファイルで

ActiveRecord::Base.include_root_in_json = false 

    @token = User.all.to_json(only: [:id, :firstname]) 

、ユーザテーブルからidfirstname属性をとるトークンという名前rubyの変数を宣言しましたこれを見てください。最も簡単な方法の

http://tech.thereq.com/post/17243732577/rails-3-using-link-to-remote-true-with-jquery-ujs

一つ、あなたはコントローラのアクションで定義された変数にアクセスするためにルビータグを行うことができますjs.erbファイルを、使用することです。

コントローラーのアクションでrespond_toブロックを使用し、javascriptに応答できるアクションを指定する必要があります。

items_controller.rb

class ItemsController < ApplicationController 

    def action 
    respond_to do |format| 
     format.js 
     #format.html {} # These are for allowing other types of formats to be responded to. 
     #format.json {} # But they are not necessary for using this js.erb way of doing things. 
    end 
    end 

end 

/views/items/action.js.erb

$(div).html('The cat has erased your page'); 
関連する問題