У меня проблема с разрешением пользователям оценивать сообщение.Моя задача - дать пользователю возможность оценить пост только один раз.На странице шоу у меня есть радио-кнопки для рейтинга.Если пользователь пытается оценить во второй раз, ему необходимо обновить предыдущую оценку, сделанную пользователем для того же сообщения.Проблема, с которой я сталкиваюсь, заключается в том, что пользователь может оценивать сообщение несколько раз.Как решить эту проблему?
Модель пользователя:
class User < ApplicationRecord
has_many :posts
has_many :ratings
end
Модель поста:
class Post < ApplicationRecord
has_many :ratings
belongs_to :user
end
Рейтинги модели
class Rating < ApplicationRecord
belongs_to :post
belongs_to :user
end
В контроллерах постая использовал вложенные атрибуты для рейтингов.
def show
@post = @topic.posts.find(params[:id])
@rate = @post.ratings.all
@rate = Rating.where(post_id: @post.id).group("rate").count
end
private def post_params
params.require(:post).permit(:title, :body, ratings_attributes: [:rate])
end
Страница показа поста включает создание рейтинга с использованием <fieldset>
:
<%= form_for [@topic, @post] do |f| %>
<%= f.fields_for :ratings, @post.ratings.build do |builder| %>
<fieldset>
<% for i in 1..5 %>
<%= builder.radio_button :rate, i %><%= i %>
<% end %>
</fieldset>
<% end %>
<%=f.submit "Rate" %>
<% end %>