2

このような友達関係を設定するユーザーモデルを備えたRailsアプリがあります

ユーザー.rb

has_many :friendships
has_many :friends, :through => :friendships

各ユーザーはhas_manyRecipe.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 %> 
  1. レシピを取得するには、User モデルのスコープ メソッドをどのように変更する必要がありますか (または何か他のものを変更しますか?)。

  2. これは、友人をループしてレシピを配列に追加する最良の方法ですか?

    @user.friendships.each do |friend|
      @friend_recipes << User.recipes_by_friends(friend.friend_id)
    end
    
4

1 に答える 1