Прямо сейчас у меня есть это приложение для социальных сетей, где я реализую рейтинги пользователей по категориям. Что я хочу сделать, это:
Всякий раз, когда пользователь голосует за статью, он собирает все голоса за статью и получает среднее значение за баллы / голоса и вставляет это значение в другую модель, которая у меня есть (Рейтинг категории пользователей), теперь мой вопрос Есть ли какой-то способ, которым я могу на самом деле сделать функции и просто вызвать его внутри контроллера для голосования по функции создания? Кроме того, что было бы лучшим способом для достижения среднего, с помощью чистого SQL или есть "рубиновый" способ?
Если кому-то из вас, ребята, понадобится более подробная информация, я буду рад предоставить их, как всегда, спасибо за вашу помощь.
EDIT
Прямо сейчас он вставляется в первый раз, но не будет обновляться, возможно, мне нужен другой метод, это то, что я сейчас имею в контроллере.
def create
@vote = Vote.new(params[:vote])
@user_rating = UserCategoryRating.new
@vote.user_id = current_user.id
@article = Article.find(@vote.article_id)
@user_rating.category_id = @article.category_id
@user_rating.user_id = @article.user_id
@user_rating.rating = @article.votes.average('value')
if @vote.save
@user_rating.save
flash[:notice] = "Your vote has been sumbmitted sucessfully"
redirect_to :controller => :articles
else
flash[:error] = "You have already voted for this article!"
redirect_to :controller => :articles
end
end
Это правильно устанавливает первый голос, но после этого он не обновляется, возможно, мне нужно проверить, что если голоса существуют, они должны обновиться, но как мне это сделать?
Josh