将多个rails变量传递给javascript

将多个rails变量传递给javascript,javascript,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,rjs,Javascript,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,Rjs,我在ruby中有一些值(变量和对象/hash),我想在呈现页面上传递给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

我在ruby中有一些值(变量和对象/hash),我想在呈现页面上传递给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
这里的问题是我无法声明对象,必须单独声明变量。我想知道rails中是否有一些方法可以轻松做到这一点,因为这是一个相当复杂的问题


如何将变量和对象传递给javascript?请提供一些语法示例

也许您应该尝试使用objects.to_json;)

我喜欢使用JSON类型的脚本标记来完成工作。它避免了对全局名称空间的污染,Rails恰好非常支持将对象序列化为JSON

您可以在视图中使用以下内容:

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

希望有帮助

现在有点晚了,但可能会对其他人有所帮助。有一个很好的gem,它在将变量从rails传递到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])
关于这一点,也存在着一些争议

我认为使用将是最好的解决方案。
也看看这个

我发现了宝石,它看起来很有希望。您的配置和变量将传递给客户端,您可以在客户端轻松获取或设置。我需要从数据库中获取用户的名字,并以JSON格式将值传递给javascript变量

然后我声明了一个名为token的
ruby
变量,该变量从用户表中获取
id
firstname
属性

  ActiveRecord::Base.include_root_in_json = false

  @token = User.all.to_json(only: [:id, :firstname])
erb
文件中,我使用了以下行:

var tokenList = <%= @token.html_safe %>
var令牌列表=
看看这个

最简单的方法之一是使用js.erb文件,您可以在其中使用ruby标记来访问在控制器操作中定义的变量

您需要在控制器操作中使用respond_来阻止,指定能够响应javascript的操作

项目\u 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
$(div).html('The cat has erased your page');

@my_vars
表示一个数据库中的多个实体时(例如,@my_vars=MyVar.all在控制器中,其中MyVar是一个模型),我遇到了这种方法的问题。使用
解决了该问题。谢谢你的回答,很有帮助!相关:stackoverflow.com/questions/2464966/passing-ruby-variables-to-javascript-function-in-rails-view
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
$(div).html('The cat has erased your page');