您好,我正在尝试学习如何在Rails应用程序上制作红宝石。我陷入了require_relative语法。当前,我有一个game_runner.rb文件,该文件不在app目录中,该文件应该从模型中的role.rb获取方法(who_is_hider)。我输入正确吗?当我运行当前代码时,出现“未初始化的常量ApplicationRecord”错误。因为我有一个application_record.rb文件,里面有(self.abstract_class = true),所以这没有任何意义。谢谢您的宝贵时间。
game_runner.rb
require_relative './app/models/Role'
who_is_hider
role.rb
class Role < ApplicationRecord
belongs_to :round
belongs_to :player
enum label: {seeker: 1, hider: 2, decoy: 3}
validates :player_id, uniqueness: {scope: :round_id}
def who_is_hider
p "made it here"
end
end
application_record.rb
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
end
答案 0 :(得分:0)
我坚持使用require_relative语法。 […]我输入正确吗?运行当前代码时,出现“未初始化的常量ApplicationRecord”错误。
是的,您的语法正确。如果您的语法不正确,则您的代码甚至根本不会运行,您会得到SyntaxError
。您的代码确实运行并产生NameError
异常的事实毫无疑问表明您的语法正确。
作为检查语法是否正确的简便方法,您可以
ruby -c
来检查语法如果有可用的话,最后一个是首选。但是有时候,您是在没有可用的Ruby执行引擎的环境中编写代码的,在这种情况下,您至少可以使用编辑器,或者甚至(肯定不是很好,很容易混淆)来突出显示Stack Overflow用途。尽管特别是后一种情况不是很好,但它仍然确实强调由错别字引起的容易犯的错误,例如未终止的字符串文字。
答案 1 :(得分:0)
嗯,您使用的是单个ruby文件,希望加载所有rails环境吗?您的角色模型了解ApplicationRecord,因为Rails在后台加载了很多东西。如果Rails不在中间,那么您必须明确地告诉加载想法。您可以在game_runner文件上或在role.rb内要求ApplicationRecord,但随后还必须要求ActiveRecord。
我认为做您想做的事不是一个好主意。如果您不想运行某些取决于您的环境的脚本,建议您使用rake任务,它将处理环境的加载。如果您仍然想按原样运行game_runner.rb,则必须导入解释器抱怨的所有内容,直到其生效。