Как включить связанные объекты с помощью gon в Rails / jQuery - PullRequest
1 голос
/ 29 марта 2012

У меня есть заметка, и она имеет определенное количество атрибутов. Он также имеет связанные теги. Я использовал gon, чтобы сделать эту переменную доступной для javascript-файлов страницы (делая @ note.attributes доступным для этой страницы).

Я могу легко вывести атрибуты заметки, например, если я создаю экземпляр:

 gon.note = @note.attributes

Я могу вывести его содержимое:

 alert(gon.note.content)

Но это не пропускает теги заметок ... Я не могу, например, сделать:

 alert(gon.note.tags)

Что делать, если я хочу отобразить теги заметки, но я хочу перенести их с помощью gon.note, а не сделать целую переменную gon.tags. Как я могу это сделать (может быть, какое-то соединение или включить)? Я хочу сделать это, потому что, скажем, лучше, если у вас отображается несколько заметок.

Ответы [ 2 ]

6 голосов
/ 11 сентября 2012

Rails имеет полезный метод as_json , который позволяет вам указывать ваши ассоциации, какие поля включать и даже методы включать. Он возвращает хэш ruby ​​для отдельных объектов или массив для коллекций, и он будет хорошо сериализован, когда gon вызовет для него to_json.

gon.note = @note.as_json(:include => [:tags]))
0 голосов
/ 29 марта 2012

Если ваша @note.tags является has_many ассоциацией (не простым массивом), gon не знает, как сериализовать массив из Tag экземпляров.

Вы ничего не можете сделать, кроме как ввести другую переменную:

# controller
gon.note_tags = @note.tags.map &:attributes

# JS
var first_tag_name = gon.note_tags[0].name;

Вы можете использовать Rabl , если вам нужно сериализовать слишком много объектов AR, поскольку gon поддерживает Rabl.

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