Создать JSON-представление не-ActiveRecord модели - PullRequest
0 голосов
/ 05 июля 2011

Я пытаюсь создать модель в приложении Rails 3.1rc4, которая не основана на ActiveRecord.

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

Я пытаюсь представить коллекцию всей базы данных JSON для обработки Backbone.js. Тем не менее, я не могу найти подходящий способ сделать это. Приведенный выше код почти работает, но двойные кавычки в результатах кодируются как &quot;. Кроме того, я хотел бы иметь возможность включать только свойство @name, а не свойство @connection. Может кто-нибудь, пожалуйста, помогите мне определить подходящий способ кодирования этого?

Ответы [ 2 ]

0 голосов
/ 14 июля 2011

Мне удалось решить проблему с помощью варианта ответа: rails - как отрендерить объект JSON в представлении

0 голосов
/ 05 июля 2011

This:

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\"}" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...