NameError 未初始化常量 Model::Object

use*_*835 5 ruby ruby-on-rails nameerror devise uninitialized-constant

我是 ruby​​ on Rails 的新手。我的错误是

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

我在其他堆栈溢出问题上读到,通常是错误名称或忘记belongs_to或has_many的错误,但我相信我已经正确设置了关系。我正在使用 gem 设备来处理用户并登录/注册等

评论.rb

class Reviews < ActiveRecord::Base

  belongs_to :user
    belongs_to :renters

end
Run Code Online (Sandbox Code Playgroud)

用户.rb

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

  has_many :reviews
end
Run Code Online (Sandbox Code Playgroud)

评论_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
Run Code Online (Sandbox Code Playgroud)

租客模型工作正常,我必须制作一个新的租客的类似代码正在工作,所以我不确定出了什么问题。

spi*_*ann 6

ActiveRecord::Base类通常以单数命名。

Ruby on Rails 命名约定期望您的类被命名Review,并且它应该存储在名为的文件中models/review.rb(但仍将其条目存储在reviews数据库表中)。

如果您不想遵循此约定,则必须明确告诉 Rails 该类在belongs_toandhas_many关联定义中的命名方式不同。

因为这样的约定使得使用 Ruby on Rails 变得更加容易,所以我强烈建议遵循而不是违反这些命名约定。