2015-12-30 2 views
1

Я пытаюсь отобразить список действий в форме json, чтобы использовать эти данные в своем приложении AngularJS. Это моя деятельность контроллер:Включить данные пользователя в другом контроллере

def index 
    @activities = PublicActivity::Activity.order("created_at desc") 
    respond_to do |format| 
    format.json do 
     render :json => @activities.to_json() 
    end 
    end 
end 

И это делает JSON как это:

{"id":3,"trackable_id":6,"trackable_type":"Movie","owner_id":1,"owner_type":"User","key":"movie.create","parameters":{},"recipient_id":null,"recipient_type":null,"created_at":"2015-12-30T12:31:24.765Z","updated_at":"2015-12-30T12:31:24.765Z"}, 
{"id":2,"trackable_id":5,"trackable_type":"Movie","owner_id":1,"owner_type":"User","key":"movie.create","parameters":{},"recipient_id":null,"recipient_type":null,"created_at":"2015-12-30T11:55:06.766Z","updated_at":"2015-12-30T11:55:06.766Z"}, 

Как вы можете видеть, что это значение называется owner_id. Это совпадает с user id пользователя, который выполнял эту операцию.

У меня, конечно, есть модель пользователя с именем, электронной почтой и т. Д. Таким образом, для первого пользователя с идентификатором 1 это выглядит так,

{"id":1,"email":"[email protected]","name":"John Doe"}, 

Можно ли проверить owner_id в деятельности и найти user_id, совпадающий, а затем добавить имя, адрес электронной почты и т.д. значение контроллер активности?

Результат будет JSON рендеринга, как это:

{"id":3,"trackable_id":6,"trackable_type":"Movie","owner_id":1,"email":"[email protected]","name":"John Doe","owner_type":"User","key":"movie.create","parameters":{},"recipient_id":null,"recipient_type":null,"created_at":"2015-12-30T12:31:24.765Z","updated_at":"2015-12-30T12:31:24.765Z"}, 
{"id":2,"trackable_id":5,"trackable_type":"Movie","owner_id":1,"email":"[email protected]","name":"John Doe","owner_type":"User","key":"movie.create","parameters":{},"recipient_id":null,"recipient_type":null,"created_at":"2015-12-30T11:55:06.766Z","updated_at":"2015-12-30T11:55:06.766Z"}, 

ответ

1

Конечно! Просто включите его в вашем методе to_json:

render :json => @activities.to_json(include: :owner) 

Предполагая, что activityhas_oneowner

Вы также можете включить только определенные атрибуты из включенных модели. Более подробную информацию о том, как обращаться с этими сериализации можно найти в to_json Rails Docs

+0

Эй Уэса, спасибо за вход. Похоже, что он работает. У меня есть вопрос, как, как Rails знает, что такое владелец? Все это происходит через кристалл Public Acitivity, я сам не определил владельца. –

+0

Драгоценный камень должен определять ассоциацию на основе 'activity', имеющего атрибут' owner_id'. Посмотрев на документы gem, похоже, что 'owner' является именем по умолчанию для ассоциации –

+0

Вот что я подумал. Спасибо, у меня есть еще одна проблема, возможно, вы можете проверить ее, чтобы узнать, можете ли вы придумать решение. Я обновил свой вопрос с проблемой. В любом случае, спасибо за помощь. –

0

Вы можете использовать active_model_serializers камень, а затем создать сериалайзер для пользователей и мероприятий:

# app/serializers/user_serializer.rb 
class AuthorSerializer < ActiveModel::Serializer 
    attributes :id, :name ... 
end 

# app/serializers/activity_serializer.rb 
class AuthorSerializer < ActiveModel::Serializer 
    # some attributes 
    has_one :user 
end 
Смежные вопросы