Ich habe drei Modelle, User
, Movie
und Review
. Hier ist die Beziehung:Lassen Sie den Benutzer nur eine Rückmeldung für jeden Film erstellen
# User.rb
has_many :movies
has_many :reviews
# Movie.rb
belongs_to :user
has_many :reviews
# Review.rb
belongs_to :movies
belongs_to :users
Hier ist die Routen:
# routes.rb
resources :movies do
resources :reviews
end
Hier ist die Steuerung:
# reviews_controller.rb
class ReviewsController < ApplicationController
before_action authenticate_user!
before_action :find_movie
before_action :find_review, only: [:edit, :update, :destroy]
def new
@review = Review.new
end
def create
@review = Review.new(review_params)
if @review.save
redirect_to movie_path(@movie)
else
render 'new'
end
end
def edit
end
def update
if @review.update(review_params)
redirect_to movie_path(@movie)
end
end
private
def find_movie
@movie = Movie.find(params[:movie_id])
end
def find_review
@review = Review.find(params[:id])
end
def review_params
params.require(:review).permit(:rating, :comment)
end
end
habe ich eine neue und teilweise Form und dann in der Show-Seite von der Film, ich erstelle diese Codezeile, um die Schaltfläche zum Erstellen neuer Rezension für einen bestimmten Film anzuzeigen:
# views/movies/show.html.erb
<%= link_to 'Give review', new_movie_review_path(@movie) %>
Ich möchte nicht, dass der Nutzer eine neue Bewertung erstellt, nachdem er eine Rezension für denselben Film eingereicht hat. Deshalb möchte ich die Schaltfläche "Bewertung abgeben" ausblenden, wenn der Benutzer bereits Feedback gegeben hat. Wie mache ich das?