创建非ActiveRecord模型的JSON表示

时间:2011-07-04 20:35:25

标签: ruby-on-rails json ruby-on-rails-3 backbone.js

我正在尝试在不基于ActiveRecord的Rails 3.1rc4应用程序中创建模型。

class Database
  attr_reader :name

  def initialize(connection, database_name)
    @connection = connection
    @name = database_name
  end

  def self.all
    connection = Mongo::Connection.new("localhost")
    connection.database_names.map { |db_name| new(connection, db_name) }.sort { |x, y| x.name <=> y.name }
  end
end

我希望能够在_list.html.erb模板中将其呈现为JSON,如下所示

<script>
  var databases = <%= @databases.as_json %>
</script>

应用程序控制器中的方法如下

def populate_databases
  @databases = Database.all
end

我试图表示Backbone.js要处理的所有数据库JSON的集合。但是,我似乎无法找到适当的方法来做到这一点。上面的代码几乎可以工作,但结果中的双引号被编码为&quot;。另外,我希望能够只包含@name属性而不包含@connection属性。有人可以帮我确定合适的编码方式吗?

2 个答案:

答案 0 :(得分:0)

此:

var databases = <%= @databases.as_json %>

自动编码@databases.as_json以便在HTML中使用,这就是您的双引号转换为&quot;的原因。请尝试使用escape_javascript代替:

var databases = <%= escape_javascript @databases.to_json %>

此外,as_json返回一个准备转换为JSON的数据结构,to_json返回实际的JSON字符串,因此您可能希望在进行此操作时修复它;例如:

ruby-1.9.2-p0 > {:a => 'a'}.as_json
 => {"a"=>"a"} 
ruby-1.9.2-p0 > {:a => 'a'}.to_json
 => "{\"a\":\"a\"}" 

答案 1 :(得分:0)

我能够解决实现此答案变体的问题:rails - how to render a JSON object in a view