我有一个带有用户模型的 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.friendships.each do |friend| @friend_recipes << User.recipes_by_friends(friend.friend_id) end