2016-12-18 14 views
1

레일에서 루비를 처음 사용했습니다. 내가 가진 IHE 오류가NameError 초기화되지 않은 상수 모델 :: Object

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

내가 그 보통 잘못된 이름에 대한 오류 또는 belongs_to 또는 has_many 잊고 다른 스택 오버플로 질문을 읽어하지만 난 내가 제대로 관계를 설정 한 믿습니다. 나는 사용자를 처리하고 로그인을 고안 보석을 사용하고/등

Reviews.rb

class Reviews < ActiveRecord::Base 

    belongs_to :user 
    belongs_to :renters 

end 

User.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 모델이 잘 작동하고 새로운 렌터카를 만드는 유사한 코드가 작동하고있어 무엇이 잘못되었는지 잘 모릅니다.

답변

1

ActiveRecord::Base 클래스는 일반적으로 단 수로 명명됩니다.

즉, 클래스 이름은 Review이어야하고 models/review.rb 파일에 저장해야합니다 (그러나 해당 항목은 reviews 데이터베이스 테이블에 저장해야 함).

이 규칙을 따르고 싶지 않다면, belongs_tohas_many 연관의 정의에서 클래스의 이름이 다르게 명명 된 것을 레일스에 명시 적으로 말해야합니다.

+0

감사합니다. 클래스가 단수이어야한다는 것을 알지 못했습니다. 내 모델과 컨트롤러뿐만 아니라 경로 및 현재 작동 감사 변경 – user1558835

0

파일에 Review을해야 당신의 reviews 테이블의 모델 클래스 : 응용 프로그램/모델/review.rb

class Review < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :renters 
end 

와 파일에 있어야합니다 users 표를 대표하여 User 모델 : 응용 프로그램/모델/user.rb

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

    has_many :reviews 
end 

참고 :이 연결이 작동하려면, 당신의 리뷰 테이블이 있어야합니다 연관된 모델 (예 : User.find(1).reviews)의 user_id 테이블에 대한 모든 레코드를 얻기위한 외래 키로 user_id을 입력하십시오.