【问题标题】:Create a JSON representation of a non-ActiveRecord model创建非 ActiveRecord 模型的 JSON 表示
【发布时间】:2011-09-28 09:15:50
【问题描述】:

我正在尝试在不基于 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 的集合。但是,我似乎无法找出适当的方法来做到这一点。上面的代码几乎可以工作,但是结果中的双引号被编码为&amp;quot;。另外,我希望能够只包含 @name 属性而不是 @connection 属性。有人可以帮我确定适当的编码方式吗?

【问题讨论】:

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


    【解决方案1】:

    这个:

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

    会自动编码 @databases.as_json 以用于 HTML,这就是您的双引号被转换为 &amp;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\"}" 
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-25
        • 2017-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多