如何计算用户对我的特定项目(Rails)所做的所有喜欢

我为新手问题道歉,我对Rails和SQL相对较新。 我正在尝试计算用户对我的特定项目所做的所有喜欢。 在SO社区和Treehouse Coding的帮助下,我能够显示哪些用户喜欢我的特定项目。 此外,我能够研究如何在我的控制器中使用.join显示我收到的所有喜欢(来自Lisa,James,Harry等)。 现在我想显示每个特定用户的计数。 所以,例如,如果詹姆斯喜欢我的4件物品,我想在詹姆斯旁边展示4件。 我在下面列出了所有相关代码,非常感谢你们!

Index.html.erb

My Fans -      

Items_controller

 def index @items = Item.order("created_at DESC") if current_user.present? @likers = current_user.items.map(&:likes).flatten.map(&:user).flatten @likersnumero = current_user.items.joins(:likes).map(&:user).count end end 

item.rb的

 class Item  true end 

users.rb的

 class User < ApplicationRecord has_many :likes def likes?(post) post.likes.where(user_id: id).any? end #Tried using def total_likes in my index.html.erb using  but got the following error SQLite3::SQLException: no such column: likes: SELECT SUM(likes) FROM "likes" WHERE "likes"."user_id" = ?" def total_likes likes.sum(:likes) end end 

的routes.rb

 Rails.application.routes.draw do resources :items do resource :like, module: :items end root to: "items#index" end 

Schema.rb

 create_table "items", force: :cascade do |t| t.string "product" t.integer "user_id" t.integer "item_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "avatar_file_name" t.string "avatar_content_type" t.integer "avatar_file_size" t.datetime "avatar_updated_at" t.integer "likes_count", default: 0, null: false end create_table "likes", force: :cascade do |t| t.integer "user_id" t.integer "item_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false end 

鉴于poster_id是喜欢post的用户, poster_id是创建post的人的id。

 liker.likes.joins(:items).where('items.user_id = ?', poster_id).count 

或者类似的东西。 如果您发布带注释的模型或表模式,我可能会想出一个更好的答案。

经过无数次的阅读和体验,我找到了对我有用的答案。 万一有人可能会遇到类似的问题 – 我提供的答案对我有用。

要获得特定用户对所有用户项目的总喜欢 – 在我的控制器中,我将以下@likersuno = @ likers.map(&:likes).flatten.map(&:user).flatten.uniq

在我的index.html.erb中

我只是把它放在那里,它从那里起作用

 <%= @likersuno.count %> 

要获得特定用户对我的特定项目的总喜欢 – 在我的index.html.erb中,我将以下内容工作得很漂亮

 <%= liker.likes.select { |like| like.item.user == current_user }.count %>