У меня две модели чая и обзор. Я вложил маршрут для создания отзывов для определенного c чая, но когда я отправляю форму, я получаю сообщение об ошибке UrlGeneration на основании отсутствия необходимого ключа. Ниже приведено действие контроллера и маршрут и изображение ошибки. Я пытаюсь, чтобы пользователь создал новый отзыв из / teas / 1 / reviews / new, это вложенная форма, проблема в том, что он не сохраняет создание.
Review Model
class Review < ApplicationRecord
belongs_to :user
belongs_to :tea
validates :title, presence: true
validates :rating, numericality: {only_integer: true, greater_than_or_equal_to: 0, less_than: 11}
validates :tea, uniqueness: {scope: :user, message: "has already been reviewed by you" }
scope :order_by_rating, ->{left_joins(:reviews).group(:id).order('avg(rating) desc')}
end
class ReviewsController < ApplicationController
before_action :set_review, only:[:create, :show, :edit, :update, :destroy]
def new
if @tea = Tea.find_by_id(params[:tea_id])
@review = @tea.reviews.build
else
@review = Review.new
end
end
def create
@review = current_user.reviews.build(review_params)
if @review.valid?
@review.save
redirect_to new_review_path(@review)
else
render :new
end
end
def show
@review = Review.find_by_id(params[:id])
end
def index
if @tea = Tea.find_by_id(params[:tea_id])
@reviews = @tea.reviews
else
@reviews = Review.all
end
end
def edit
end
def update
@review.update(review_params)
redirect_to tea_reviews_path(current_user.id)
end
def destroy
@review.destroy
flash[:delete_review] = "Review Deleted!"
redirect_to reviews_path(@review)
end
private
def review_params
params.require(:review).permit(:tea_id, :content, :rating,:title)
end
def set_review
@review = Review.find_by_id(params[:id])
redirect_to reviews_path if !@review
end
end
Route
resources :reviews
resources :teas do
resources :reviews, only: [:new, :index]
end