2013-04-18 2 views
0

Что будет лучшим способом найти «корневые» параметры вызываемого метода в рельсах?Rails ассоциация с параметрами «root»

User.first.comments # => [#<Comment id: "1", name: "First comment" ... 

и мне нужно что-то вроде этого:

User.first.comments #<User id:1, name:"First User", comments: [ 
    #<Comment id: "1", name: "First comment" ..., #<Comment ... ] 

, необходимые для сериализации .. Спасибо.

ответ

2

Вы знаете, эта проблема на самом деле, вероятно, не имеет ничего общего с includes. Независимо от того, получены ли комментарии пользователя с помощью запроса N + 1 или нет, это не имеет значения.

Я думаю, что вам, вероятно, нужно что-то вроде RABL. Я использовал его, и это потрясающе.

+0

Теперь я использую этот https://github.com/rails-api/active_model_serializers, но проблема в том, что когда у меня есть более одного параметра, чтобы получить (например, комментарий и его рейтинг), поэтому вам нужно получить комментарий и проверить рейтинг, выбрать комментарии, которые соответствуют и отправляют json. –

+0

Я использовал 'active_model_serializers' крошечный бит, и я нашел RABL более простым в использовании. Возможно, вы захотите дать ему вращение. Может быть ясно, с RABL, как решить вашу проблему. –

+0

Вы правы! Благодаря :) –

2

User.first.includes(:comments)?

+0

Я стараюсь, но я все еще получаю неопределенный метод 'includes' –

+3

Это потому, что мой ответ неверен. Кто заставляет это дерьмо ?! –

+0

Im not: D ..... –

2

Это наоборот:

user = User.includes(:comments).first 
# SQL queries 
# => #<User ...> 

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

user.comments 
# => [#<Comment ...>, #<Comment ...>] 
+0

Эта работа, но не включенной в состав, я должен позвонить User.includes (: comments) .first.comments, чтобы получить связь ... –

+0

Правильно, но комментарии получены вместе с пользователь, я обновил свой ответ. – Stefan

+0

Хорошо, хорошо, есть ли все-таки горячие сливки? чтобы получить # <Комментарии пользователей: "и вот массив с комментариями пользователя?">, merge (method) не работает для меня .. –