Вопрос: Как я могу использовать гем act_as_votable, чтобы система «репутации пользователя» работала для моей модели пользователя?Я не уверен в лучшем подходе, учитывая приведенный ниже код.
По сути, у меня есть модель пользователя.Что я хочу сделать, так это для некоторых пользователей (а именно учетных записей администраторов), они могут получить доступ к странице, где все пользователи доступны для просмотра, и «голосовать» за пользователя с точки зрения его репутации.
Моя проблема в том, чтоНасколько я понимаю, драгоценный камень требует как act_as_votable, так и act_as_voter внутри модели.
Однако, поскольку избиратель - это пользователь, а голосующий - тоже пользователь, я не уверен, как поступить с этим.
То, что я до сих пор делал, это:
Gem-файл:
gem 'acts_as_votable'
Консольные рельсы генерируют действие_as_votable: миграция рейка БД: миграция
У меня есть модель:
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>