我想命名所有喜欢该帖子的用户。
我有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 %>
我需要为某个用户喜欢的帖子连接用户,例如和帖子表。我不知何故需要合并两个查询。
@ like是一个数组,改为使用@like = @ liked.where(post_id:7).first
然后尝试@ like.user
您是否只是想获得喜欢某个帖子的用户的姓名来显示他们?如果是这种情况,您可以将一个函数添加到一个名为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 %>
这不会像您的帖子的最后一部分所要求的那样完全连接这三个模型,但是至少可以让您显示喜欢该帖子的用户。