gpt4 book ai didi

ruby-on-rails - 在投票后禁用 acts_as_votable gem 中的投票按钮

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:24:46 25 4
gpt4 key购买 nike

上下文:

我有一个 acts_as_votable 论坛线程模型。赞成票功能运行良好up vote 按钮允许 current_user 仅对论坛线程进行一次投票,这是所需的功能。一旦 current_user 单击它,我试图将投票按钮的 css 更改为不同的颜色。

<%= link_to forum_thread do %>
<h3>
<%= link_to like_forum_thread_path(forum_thread), method: :put, class: "" do %>
<span class="glyphicon glyphicon-arrow-up"></span>
<% end %>
<%= forum_thread.get_upvotes.size %>
<%= forum_thread.subject %>
</h3>
<% end %>

问题:

实现此目的的一种方法是获取对论坛主题投票的所有 user_id(使用@forum_thread.votes_for_ids)的列表,并检查 current_user 用户 id 是否与列表匹配。如果是这样,则禁用该按钮。有没有更有效的方法来做到这一点?

最佳答案

解决方案优先:

@user.voted_for? @post

它也可以在文档中找到。 Here

现在,让我们进入细节:

您当前的解决方案执行以下操作:

  1. 获取帖子上的所有选票。理想情况下,确保让 MySQL 返回尽可能少的 ActiveRecord 对象。因为,将每个 MySQL 行转换为 Active Record 会造成相当大的性能损失。

  2. 遍历所有 ActiveRecords 并在其中收集 USER_ID。循环是另一个性能障碍,如果您可以轻松避免的话。

相反,更喜欢 MySQL 查询,它返回我们真正需要的 ROW/Data,“如果当前用户对帖子进行了投票”。类似(您需要使用正确/适当的数据库表名):

PostVote.find_by_post_id_and_user_id(post_id, user_id).

如果用户投票或未投票,上面的返回。

或者,Acts_As_Votable 确实提供了相同的功能,而您无需执行繁重的工作:

@user.voted_for? @post

关于ruby-on-rails - 在投票后禁用 acts_as_votable gem 中的投票按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27382037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com