У меня есть три модели, User
, Movie
и Review
. Вот это отношение:Только разрешить пользователю создавать одну обратную связь для каждого фильма
# User.rb
has_many :movies
has_many :reviews
# Movie.rb
belongs_to :user
has_many :reviews
# Review.rb
belongs_to :movies
belongs_to :users
Здесь маршруты:
# routes.rb
resources :movies do
resources :reviews
end
Вот это контроллер:
# 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
Я создал новый и частичную форму, а затем в шоу странице в фильме я создаю эту строку кода, чтобы показать кнопку создания нового обзора для конкретного фильма:
# views/movies/show.html.erb
<%= link_to 'Give review', new_movie_review_path(@movie) %>
Я не хочу, чтобы пользователь создавал другой обзор после отправки обзора для того же фильма. Вот почему я хочу скрыть кнопку «Дать обзор», если пользователь уже дал обратную связь. Как мне это сделать?