我为新手问题道歉,我对Rails和SQL比较陌生。我正在尝试计算用户对我的特定项目所做的所有喜欢。在SO社区和Treehouse Coding的帮助下,我能够显示哪些用户喜欢我的特定项目。此外,我能够研究如何在我的控制器中使用.join显示我收到的所有喜欢的内容(来自Lisa,James,Harry等)。现在我想显示每个特定用户的计数。所以,例如,如果詹姆斯喜欢我的4件物品,我想在詹姆斯旁边展示4件。我在下面列出了所有相关代码,非常感谢你们!
Index.html.erb
My Fans - <%= @likersnumero%>
<%- @likers.each do |liker| %>
<%= image_tag liker.avatar, width: 25, class: "css-style" %>
<%= liker.username %>
<% end %>
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 < ApplicationRecord
has_many :likes, :counter_cache => 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 <%= liker.total_likes%>
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
答案 0 :(得分:0)
鉴于liker
是喜欢发帖的用户,而poster_id
是创建帖子的人的ID。
liker.likes.joins(:items).where('items.user_id = ?', poster_id).count
或者类似的东西。如果您发布annotated模型或表格架构,我可能会得到更好的答案。
答案 1 :(得分:0)
经过无数的阅读和体验,我找到了对我有用的答案。万一有人可能会遇到类似的问题 - 我提供的答案对我有用。
要让所有用户项目的特定用户总得 - 在我的控制器中我放了以下内容 @likersuno = @ likers.map(&amp ;: likes).flatten.map(&amp;:user).flatten.uniq
在我的index.html.erb
中我只是把它放在那里,它从那里起作用
<%= @likersuno.count %>
要获得特定用户对的总评价 - 在我的index.html.erb中,我将以下内容与之相得益彰
<%= liker.likes.select { |like| like.item.user == current_user }.count %>