2011-07-04 40 views
0

我試圖在不基於ActiveRecord的Rails 3.1rc4應用程序中創建模型。創建非ActiveRecord模型的JSON表示

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 

我希望能夠呈現的JSON在_list.html.erb模板如下

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

如下

def populate_databases 
    @databases = Database.all 
end 

我試圖在應用程序控制器的方法表示由Backbone.js處理的所有數據庫JSON的集合。但是,我似乎無法找出適當的方法來做到這一點。上面的代碼幾乎可以工作,但結果中的雙引號編碼爲&quot;。此外,我希望能夠僅包含@name屬性,而不是@connection屬性。有人可以幫助我確定適當的編碼方式嗎?

回答

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\"}"