Rails 3: рендеринг определенных атрибутов массива объектов в JSON - PullRequest
4 голосов
/ 22 марта 2011

Я пытаюсь передать некоторые данные в Javascript на мой взгляд.Мне нужны только определенные атрибуты объектов в массиве.

Похоже, что гем json не поддерживает опцию :only.Я пытался использовать ActiveSupport :: JSON

<script>
test1=<%=raw ActiveSupport::JSON.encode(@sectionDatas.values, :only => [ :left, :width ])%>;
</script>

, но это игнорирует :only и печатает весь объект.

Тогда я подумал, что буду умнее и возьму метод renderс контроллера:

test2=<%=raw render :json => @sections.as_json(:only => [:left, :width])%> 

но я получаю ошибки Nil: Nilclass.

Я также попытался вставить это в мою модель и запустить to_json:

include ActiveModel::Serialization::JSON

def attributes
  @attributes ||= {'left' => 0, 'width'=>0}
end

Сноваэто игнорирует метод атрибутов и сериализует весь объект.

Конечно, это должно быть просто.Чего мне не хватает?

Ответы [ 2 ]

3 голосов
/ 22 марта 2011

Предполагая, что объекты в массиве являются экземплярами ActiveRecord::Base или включают ActiveModel::Serialization::JSON:

test2=<%=raw @sections.to_json(:only => [:left, :width]) %> 
2 голосов
/ 22 марта 2011

Вы можете отфильтровать ненужные столбцы, когда получаете объекты из БД с помощью select.

Item.find( :all, :select => 'DISTINCT fieldname' )

Конечно, это не путь Rails3.Вот что:

Model.select(attribute)

Обновление

Если вы хотите иметь исходный массив объектов и json, но json с отфильтрованными атрибутами, вам нужно будет переопределить to_json:

Этот пост объясняет, как это сделать:

Как переопределить to_json в Rails?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...