J'essaie de mettre en place un système d'évaluation 5 étoiles afin que les utilisateurs puissent noter les autres utilisateurs. Pour le moment, tout fonctionne (créer, supprimer, mettre à jour, etc ...) mais seul l'utilisateur connecté peut évaluer lui-même. Je ne peux pas évaluer les autres utilisateurs. Je ne reçois aucune erreur, il redirige juste vers la page de profil de l'utilisateur comme il se doit mais sans ajouter une note à cet utilisateur.Évaluation des utilisateurs de Rails, je ne peux me donner aucune opinion
user.rb
class User < ActiveRecord::Base
has_many :reviews
review.rb
class Review < ActiveRecord::Base
belongs_to :user
end
reviews_controller.rb
class ReviewsController < ApplicationController
before_action :find_user
before_action :find_review, only: [:edit, :update, :destroy]
def new
@review = Review.new
end
def create
@review = Review.new(review_params)
@review.user_id = current_user.id
if @review.save
redirect_to user_path(@user)
else
render 'new'
end
end
def edit
end
def update
if @review.update(review_params)
redirect_to user_path(@user)
else
render 'edit'
end
end
def destroy
@review.destroy
redirect_to user_path(@user)
end
private
def review_params
params.require(:review).permit(:rating, :comment)
end
def find_user
@user = User.find(params[:user_id])
end
def find_review
@review = Review.find(params[:id])
end
end
_form qui est ensuite rendu à la page show:
<%= simple_form_for([@user, @user.reviews.build]) do |f| %>
<div id="rating-form">
<label>Rating</label>
</div>
<%= f.input :comment %>
<%= f.button :submit %>
<% end %>
<script>
$('#rating-form').raty({
path: '/assets/',
scoreName: 'review[rating]'
});
</script>
Toute aide pour que cela fonctionne serait grandement appréciée !!
Il semble que votre modèle 'Rating' n'a qu'une association avec l'utilisateur (' belongs_to: user'). Mais vous en aurez besoin de deux: un pour l'utilisateur évalué et un pour l'utilisateur qui a fait l'évaluation. – spickermann