NameError 未初始化常量 Model::Object
NameError uninitialized constant Model::Object
我是 rails 上 ruby 的新手。我的错误是
NameError in ReviewsController#create
uninitialized constant User::Review
Extracted source:
@review = current_user.reviews.build(review_params)
我阅读了其他堆栈溢出问题,这些问题通常是错误名称或忘记 belongs_to 或 has_many 的错误,但我相信我已经正确设置了关系。我正在使用 gem 设计来处理用户并注册 in/sign 等
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 的类似代码正在运行,所以我不确定哪里出了问题。
ActiveRecord::Base
classes通常以单数形式命名。
这意味着你的 class 应该命名为 Review
并且它应该存储在一个名为 models/review.rb
的文件中(但它的条目仍然存储在 reviews
数据库中 table).
如果您不想遵循此约定,则必须明确告诉 Rails class 在 belongs_to
和 [=15= 的定义中的命名不同]协会。
您的 reviews
table 的模型 class 应该是 Review
在文件中:app/models/review.rb
class Review < ActiveRecord::Base
belongs_to :user
belongs_to :renters
end
和代表 users
table 的 User
模型应该在文件中:app/models/user.rb
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :reviews
end
注意:要使此关联生效,您的评论 table 必须有一个列 user_id
作为外键,用于对关联模型执行 activerecord 操作(例如:User.find(1).reviews
到获取 reviews
table 的所有记录,其 user_id
为 1)
这是按照 Rails 的惯例进行的。您可以使用函数 class_name
强制执行 class Reviews
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :reviews, class_name: "Reviews"
end
我是 rails 上 ruby 的新手。我的错误是
NameError in ReviewsController#create
uninitialized constant User::Review
Extracted source:
@review = current_user.reviews.build(review_params)
我阅读了其他堆栈溢出问题,这些问题通常是错误名称或忘记 belongs_to 或 has_many 的错误,但我相信我已经正确设置了关系。我正在使用 gem 设计来处理用户并注册 in/sign 等
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 的类似代码正在运行,所以我不确定哪里出了问题。
ActiveRecord::Base
classes通常以单数形式命名。
这意味着你的 class 应该命名为 Review
并且它应该存储在一个名为 models/review.rb
的文件中(但它的条目仍然存储在 reviews
数据库中 table).
如果您不想遵循此约定,则必须明确告诉 Rails class 在 belongs_to
和 [=15= 的定义中的命名不同]协会。
您的 reviews
table 的模型 class 应该是 Review
在文件中:app/models/review.rb
class Review < ActiveRecord::Base
belongs_to :user
belongs_to :renters
end
和代表 users
table 的 User
模型应该在文件中:app/models/user.rb
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :reviews
end
注意:要使此关联生效,您的评论 table 必须有一个列 user_id
作为外键,用于对关联模型执行 activerecord 操作(例如:User.find(1).reviews
到获取 reviews
table 的所有记录,其 user_id
为 1)
这是按照 Rails 的惯例进行的。您可以使用函数 class_name
强制执行 class Reviews
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :reviews, class_name: "Reviews"
end