2016-12-18 10 views
1

Ruby on Railsの新機能です。私が持っているIHEエラーがNameError初期化されていない定数Model :: Object

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

である私が間違っている名前や忘れbelongs_toのかhas_manyのための通常のエラー他のスタックオーバーフローの質問に読んで、私は私が正しく関係を設定していると信じています。私は、ユーザーを処理し、サインインする工夫宝石を使用していますの/ etc

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 

注:この関連付けが動作するために、あなたのレビューテーブルが持っている必要があります関連するモデルにActiveRecordの操作を実行するための外部キーとして列user_id(例:user_id 1であるreviewsテーブルのすべてのレコードを取得するUser.find(1).reviews

関連する問題