1

Я новичок в рубинах на рельсах. Ошибка 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, но я считаю, что я установить отношения правильно. Я использую камень разработать для обработки пользователя и вход/регистрация и т.д.

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 работает отлично и похож на код, который я должен сделать, чтобы новый Renter работал, поэтому я не уверен, что не так.

ответ

1

ActiveRecord::Base классы обычно называются в единственном числе.

Это означает, что ваш класс должен иметь имя Review и его следует хранить в файле с именем models/review.rb (но все равно сохранить его записи в таблице базы данных reviews).

Если вы не хотите следовать этому соглашению, вы должны явно указывать Rails, что класс назван по-разному в определении ассоциацийи has_many.

+0

спасибо, не знал, классы должны были быть особыми. изменили мои модели и контроллеры, а также пути и теперь работающие благодаря – user1558835

0

ваша модель класс для reviews таблицы должна быть Review в файле: приложения/модели/review.rb

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

и ваша User модели, представляющей users таблицы должна быть в файле: приложения/модели/user.rb

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

    has_many :reviews 
end 

Примечание: для этого объединения на работу, ваш отзыв таблица должна иметь столбец user_id в качестве внешнего ключа для выполнения операций ActiveRecord на связанных моделях (например: User.find(1).reviews, чтобы получить все записи таблицы, reviewsuser_id 1)