Draper: Как преобразовать все разрешенные атрибуты и открытые методы декорированной модели в json
Я ищу простой способ конвертировать декорированную модель в json для использования в моих клиентских шаблонах. Я хотел бы найти решение, в котором все разрешенные атрибуты и открытые методы декорированной модели будут сохраняться в json.
В настоящее время у меня есть магистральная РИА с рельсами бэкенда. Я использую гем haml_coffee_assets для шаблонизации на стороне клиента. Draper там, чтобы обеспечить украшение для моей модели пользователя
class ContactDecorator < Draper::Base
include Draper::LazyHelpers
decorates :user
allows :login, :id, :total_unread, :total_messages
def for_json
{
:new_messages => new_messages,
:avatar_link => avatar_link,
:login_name_link => login_name_link,
:id => model.id,
:name => model.login,
:avatar => model.avatar.url(:small),
:humanized_messages_number =>
}
end
def humanized_messages_number
pluralize(user['total_messages'], t("share_my_trip.messages.Message"), t("share_my_trip.messages.Messages")) + " #{new_messages}"
end
def new_messages
model['total_unread'].to_i > 0 ? "(#{model['total_unread'].to_i} #{t("share_my_trip.messages.new")})" : ''
end
def avatar_link
link_to(image_tag(model.avatar.url(:small), :size => "32x32", :onerror => "this.src='/avatars/original/missing.png'"), share_my_trip_user_path(:id => model.login), :id => "user-nick-#{model.id}", :class => "author")
end
def login_name_link
link_to(model.login, share_my_trip_user_path(:id => model.login), :id => "user-nick-#{model.id}", :class => "author")
end
end
мой код контроллера выглядит так:
def index
@dialogs = ContactDecorator.decorate(current_user.contacts).collect{|c| c.for_json}
end
и чем, на мой взгляд, я просто инициализирую магистральное приложение:
:javascript
App.init({dialogs: #{@dialogs.to_json}})
Есть ли способ удалить уродливый метод декоратора #for_json?