显示用户名称的所有喜欢特定帖子的用户

问题描述 投票:0回答:2

我想命名所有喜欢该帖子的用户。

我有4个模型:用户,帖子,喜欢和评论。

一个用户可以有很多帖子。帖子可以评论&&帖子可以有很多赞。

我可以计算喜欢的帖子,但不能显示喜欢该帖子的用户的姓名。

类似模型:

class Like < ApplicationRecord
  belongs_to :post
  belongs_to :user
end

Post Model

class Post < ApplicationRecord
  belongs_to :user
  has_many :reviews, dependent: :destroy
  has_many :likes, dependent: :destroy
  validates :title, presence: true
  validates :body, presence: true
end

评论模型:

class Review < ApplicationRecord
    belongs_to :user
    belongs_to :post
end

用户模型:

class User < ApplicationRecord

  before_create { generate_token(:auth_token) }

  before_save { self.email = email.downcase }

  has_secure_password

  has_many :posts
  has_many :reviews
  has_many :likes

  validates :name, presence: true
  validates :email, presence: true, uniqueness: true
  validates :password, confirmation: true
  validates :password_confirmation, presence: true, unless: Proc.new { |a| !a.new_record? && a.password.blank? }

  def send_password_reset
    generate_token(:reset_password_token)
    self.reset_password_sent_at = Time.zone.now
    save!
    UserMailer.password_reset(self).deliver
  end


  def generate_token(column)
    begin
      self[column] = SecureRandom.urlsafe_base64
    end while User.exists?(column => self[column])
  end

end[![enter image description here][1]][1]

_ post.html.erb

<h1> Posts ( <%= @posts.count %> ) </h1>
<% @posts.each do |p| %>
    <div class="form-field">

        <h4>
            <b><%= p.title %></b>
            <%= link_to "Edit", edit_post_path(p.id), class: "btn btn-warning col-md-2-offset", style: "align-right" %> 
            <%= link_to "Delete", p, method: :delete, class: "btn btn-danger col-md-2-offset" ,data: { confirm: "You sure? "}, style: "align-right" %> 
            <% if p.reviews.count > 0 %>
                 <%= link_to "View Comments", review_path(p.id), class: "btn btn-primary" %>
            <% end %>
        </h4> 
        <%= p.body %>
        <br>
            <% if p.likes.count > 0 %>
               Likes: <%= p.likes.count %>
            <% end %>
        <br>
            <% if Like.find_by(user_id: current_user.id,post_id: p.id) %>
               <%= link_to " UnLike ", like_path(p.id), method: :delete,class: "btn btn- 
   primary fa fa-thumbs-down" %>
            <% else %>
               <%= link_to " Like ", post_likes_path(p.id), method: :post, class: "btn btn- 
    primary fa fa-thumbs-up" %>
            <% end %>
        <br> 
    </div>
<% end %>

我正在尝试这样的事情,enter image description here

我需要为某个用户喜欢的帖子连接用户,例如和帖子表。我不知何故需要合并两个查询。

ruby-on-rails ruby-on-rails-5 ruby-on-rails-6
2个回答
0
投票

@ like是一个数组,改为使用@like = @ liked.where(post_id:7).first

然后尝试@ like.user


0
投票

您是否只是想获得喜欢某个帖子的用户的姓名来显示他们?如果是这种情况,您可以将一个函数添加到一个名为get_likes_for(post_id)的控制器中,该函数将返回一个喜欢帖子的所有用户的数组:

def get_likes_for(pid)
  users = []
  Like.where(post_id: pid).each do |l|
    users << User.find_by(id: l.user_id).name
  end
  users
end

然后您可以像这样在您的帖子控制器中列出它们:

<% if p.likes.count > 0 %>
    Likes: <%= p.likes.count %>
    Liked By: <%= get_likes_for(p.id).to_s %>
<% end %>

这不会像您的帖子的最后一部分所要求的那样完全连接这三个模型,但是至少可以让您显示喜欢该帖子的用户。

© www.soinside.com 2019 - 2024. All rights reserved.