ruby-on-rails – 防止为每条评论调用upvote模型
发布时间:2020-12-16 21:16:40 所属栏目:百科 来源:网络整理
导读:我有三个模型:User,Comment和Upvote. User-to-Comment具有一对多关系,Comment-to-Upvote具有一对多关系,User-to-Upvote具有一对多关系. 我想做一些类似于Stackoverflow上的upvoting的事情.因此,当您进行upvote / downvote时,即使您刷新页面或在几天/几周后
我有三个模型:User,Comment和Upvote. User-to-Comment具有一对多关系,Comment-to-Upvote具有一对多关系,User-to-Upvote具有一对多关系.
我想做一些类似于Stackoverflow上的upvoting的事情.因此,当您进行upvote / downvote时,即使您刷新页面或在几天/几周后返回页面,箭头也会突出显示并保持突出显示. 目前我这样做: <% if Upvote.voted?(@user.id,comment.id) %> <%= link_to '^',... style: 'color: orange;'%> <% else %> <%= link_to '^',... style: 'color:black;'%> <% end %> 投票的地方?方法看起来像这样: def self.voted?(user_id,comment_id) find_by(comment_id: comment_id,user_id: user_id).present? end 因此,如果我在页面上有10条评论,这将从我的数据库中加载10次upvote,只是为了检查它是否存在! 必须有一个更好的方法来做这件事,但我认为我的大脑停止工作,所以我想不出任何. 解决方法
假设你已经正确设置了关系
# user.rb class User has_many :upvotes end 我们可以加载评论,当前用户和他的赞成票: # comments_controller.rb def index @comments = Comment.limit(10) @user = current_user user_upvotes_for_comments = current_user.upvotes.where(comment_id: @comments.map(&:id)) @upvoted_comments_ids = user_upvotes_for_comments.pluck(:comment_id) end 然后根据视图中的条件进行更改: # index.html.erb <% if @upvoted_comments_ids.include?(comment.id) %> <%= link_to '^',... style: 'color:black;'%> <% end %> 它只需要2个DB查询.希望能帮助到你. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- iphone – Xcode iOS组织者提交到应用商店的收益“归档无效
- ruby-on-rails – Rails iframe:在rails应用程序中渲染另一
- vb中的资源文件
- 解决PostgreSQL不能在Terminal Services会话中安装的问题
- ruby-on-rails – 将String转换为DateTime Ruby
- 正则表达式语法
- molapse一个数据可视化的开源软件
- ruby-on-rails – Devise Test Helper – sign_in不工作
- Oracle 软件测试工程师日常工作中常用到的查询语句(除功能
- c# – 营销人员的Sitecore webforms保存项目操作