このような友達関係を設定するユーザーモデルを備えたRailsアプリがあります
ユーザー.rb
has_many :friendships
has_many :friends, :through => :friendships
各ユーザーはhas_many
Recipe.rb モデルと関連付けられています
私のアプリでは、ユーザーの友達がそのユーザーの番組ページにレシピを投稿したいと考えています。つまり、友達のレシピを取得するために友達協会を通過します。したがって、users_controller.rb でこれを行います。
def show
@friend_recipes = []
@user.friendships.each do |friendship|
@friend_recipes << User.recipes_by_friends(friendship.friend_id)
end
end
recipes_by_friends
ユーザーモデルのクラスメソッドを呼び出す
ユーザー.rb
scope :recipes_by_friends, lambda { |friend_id|
joins(:recipes).
where(recipes: {user_id: friend_id})
}
ユーザー表示ページでは、それぞれのレシピを表示するようにしています。ただし、以下のコードでは、レシピ ローカル変数は、実際には友人のレシピではなく、友人のアクティブなレコード リレーションです。
/views/users/show.html.erb
<% @friend_recipes.each do |recipe| %></li>
<%= recipe.inspect %> ## this is the relation for the user, not the recipe
<% end %>
レシピを取得するには、User モデルのスコープ メソッドをどのように変更する必要がありますか (または何か他のものを変更しますか?)。
これは、友人をループしてレシピを配列に追加する最良の方法ですか?
@user.friendships.each do |friend| @friend_recipes << User.recipes_by_friends(friend.friend_id) end