5

Ruby on Railsは初めてです。私が持っているエラーは

NameError in ReviewsController#create
uninitialized constant User::Review
Extracted source:
    @review = current_user.reviews.build(review_params)

私は他のスタック オーバーフローの質問を読みましたが、通常は名前が間違っているか、begs_to または has_many を忘れた場合のエラーですが、関係を正しく設定したと思います。ユーザーを処理し、サインイン/サインアップなどにgemデバイスを使用しています

レビュー.rb

class Reviews < ActiveRecord::Base

  belongs_to :user
    belongs_to :renters

end

ユーザー.rb

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  has_many :reviews
end

Reviews_Controller.rb

class ReviewsController < ApplicationController
  before_action :set_renter
  before_action :authenticate_user!

  def new
    @review = Reviews.new(renters: @renter)
  end

  def create
    @review = current_user.reviews.build(review_params)
    @review.renter = @renter
    @review.save 
    redirect_to @renter 
  end

  private
    def set_renter
      @renter = Renters.find(params[:renter_id])
    end

    def review_params
      params.require(:reviews).permit(:comment, :rating)
    end
end

Renters モデルは正常に機能しており、新しい Renter を作成する必要がある同様のコードが機能しているため、何が問題なのかわかりません。

4

3 に答える 3

0

これは、Rails の規約によるものです。関数class_nameでクラスを強制できますReviews

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  has_many :reviews, class_name: "Reviews"
end
于 2020-09-02T11:10:05.850 に答える