问题:如何使用acts_as_votable gem 让“用户声誉”系统适用于我的用户模型?鉴于下面的代码,我不确定最佳方法。
本质上,我有一个用户模型。我想要做的是,对于某些用户(即管理员帐户),他们可以访问一个所有用户都可以查看的页面,并根据他们的声誉为用户“投票”。
我的问题是,据我了解,gem 在模型中需要acts_as_votable 和acts_as_voter。
但是,由于投票者是用户,而投票者也是用户,所以我不确定如何继续。
到目前为止我所做的是:
宝石文件:
gem 'acts_as_votable'
控制台导轨生成acts_as_votable:migration rake db:migrate
我的模型是:
class User < ActiveRecord::Base
end
基于此,推荐的解决方案是什么?
我尝试创建另一个模型,称为“UserReputation”,并生成了相关的控制器和视图。
我对这种方法的问题是,当我在索引页面中时,为了用户声誉,它不会针对喜欢和不喜欢按钮显示所有用户。
我理解为什么会这样,因为 UserReputation 是由用户创建的,然后用户会投票给 UserReputation(类似于论坛帖子)。这不是我想做的,但我正在关注这个教程。
本质上,如果这是唯一的方法,是否可以在 User 和 UserReputation 之间建立一个“链接”,从而将它们捆绑在一起?
这是我尝试的代码:
class User < ActiveRecord::Base
acts_as_voter
has_many :user_reputations
end
class UserReputation < ActiveRecord::Base
acts_as_votable
belongs_to :user
end
class UserReputationsController < ApplicationController
def index
@user_reputations = UserReputation.all
@users = User.all
end
end
用户声誉指数:
<table class="table" style="font-size: 18px;">
<thead>
<tr>
<th> Username </th>
<th> Reputation </th>
<th> Upvote </th>
<th> Downvote </th>
</tr>
</thead>
<tbody>
<% @user_reputations.each do |user_reputation| %>
<tr>
<td> <%= user.email %> </td>
<th> <%= "Reputation" %> </th>
<td> <%= link_to like_user_reputation_path(user), method: :put do %>
like
<%= user_reputation.get_upvotes.size %>
<% end %> </td>
<td> <%= link_to dislike_user_reputation_path(user), method: :put do %>
dislike
<%= user_reputation.get_downvotes.size %>
<% end %> </td>
</tr>
<% end %>
</tbody>
</table>
<br>