2017-05-04 6 views
0

特定の仕様に基づいて、JSONの関連モデルをレンダリングする方法を理解しようとしています。条件に基づいてjsonをレンダリングする関連モデルを含む

render json: @colleges, include: :sports 

@collegesは大学の集まりであり、すべての関連するスポーツが含まれています:これは私がこれまで持っているものです。

ただし、現在のユーザに属している場合にのみ、別の関連モデルを含めることができます。

たとえば、Favorite.where(college: @college).where(user: current_user)の大学とユーザーに属するお気に入りを取得できます。

このレンダリングにcurrent_userと各大学に属するお気に入りを含める方法はありますか?

+0

...それがお役に立てば幸いユーザーを想定することができますこれは適切な結果を返しますか? '@ colleges.joins(:favorite).where(user:current_user)' –

+0

これは適切な結果をもたらしますが、ユーザーのお気に入りが関連付けられているかどうかにかかわらず、すべての大学をレンダリングしたいと思います。しかし、関連するお気に入りがあればそれを含めたい。したがって、ユーザーのお気に入りが存在しない場合、jsonは '{college:{name: 'foo'、location: 'bar'、sports:{name: 'basketball'}}のようになります。もし存在すれば '{college:{name: 'foo'、場所: 'bar'、sports:{name: 'basketball'}、{user_id:45}}' – Doug

答えて

0

あなたは条件付きスコープを使用して、このような何かを試すことができます:あなたのモデルで

scope :favorite_for, -> (user) { joins(:favorite).where(user: current_user) if user } 

お使いのコントローラで

@colleges = College.favorite_for(current_user).all # or where() or whatever you like.. 

関連する問題