我有一个评论列表,其中current_user可以回复新评论或投票评论。现在,我正在尝试创建一个视图强制用户回复新评论或仅投票评论。
通过current_user查找没有回复(投票或评论)的评论。
评论模型
class Comment < ApplicationRecord
belongs_to :question
belongs_to :user
belongs_to :parent, class_name: 'Comment', optional: true
has_many :replies, class_name: 'Comment', foreign_key: :parent_id, dependent: :destroy
has_many :votes, dependent: :destroy
end
投票型号
class Vote < ApplicationRecord
belongs_to :user
belongs_to :comment
end
这是否可以通过良好的性能为其创建一个activerecord查询?或者,每当用户在 pending_replies 之类的新表格中创建评论时,创建记录会更容易,还是在创建回复时删除?
任何提示和起点都是惊人的!
答案 0 :(得分:1)
我认为这太糟糕了,不容易理解。
# user.rb
# Rails 4
def comments_with_no_vote_or_reply
Comment.where.not(:id => votes.pluck(:comment_id) + replies.pluck(:parent_id))
end
# Rails 3
def comments_with_no_vote_or_reply
Comment.where("comments.id not in (?)", votes.pluck(:comment_id) + replies.pluck(:parent_id))
end