我正在尝试在不基于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的集合。但是,我似乎无法找到适当的方法来做到这一点。上面的代码几乎可以工作,但结果中的双引号被编码为"
。另外,我希望能够只包含@name
属性而不包含@connection属性。有人可以帮我确定合适的编码方式吗?
答案 0 :(得分:0)
此:
var databases = <%= @databases.as_json %>
自动编码@databases.as_json
以便在HTML中使用,这就是您的双引号转换为"
的原因。请尝试使用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