我正在研究thisprettythornyproblem并决定我可以通过这样做动态创建一个继承自StandardError的类:something="JustForBelow"error_class="#{something}Error".constantizeerror_class=StandardError.new但我遇到了一个非常奇怪的错误(在我看来),它是:UninitializedconstantJustForBelowError我不是在那里初始化它吗?(本质上)当我尝试这个时出现同样的错误:StandardError.const_get"#{something}Error"
当使用contantize时,我正试图解决ruby/rails中的远程代码执行漏洞。我知道能够向服务器提供任何类名可能存在潜在危险,但我想知道这本身是否危险。例如,如果RailsController代码看起来像这样(即在实例化对象上执行硬编码方法):klass=params[:class].classify.constantizeklass.do_something_with_id(params[:id])ifklass.respond_to?('do_something_with_id')此代码易受攻击吗?还是只能结合指定要在类上调用的方法? 最佳答案
假设我将模型名称保存在一个变量中:"#{class_name.singularize}"我想从另一个Controller查看为此模型定义的列。我试过了send("#{class_name.singularize}.columns")但它试图调用Page.columns作为我当前正在使用的类的方法,而不是Page类。关于如何执行此操作的任何想法? 最佳答案 使用constantize:class_name.singularize.constantize.columns 关于ruby-on-
我有一个简单的模型:classPost它有一个名为type的INT列当我创建记录时:Post.create(:type=>1)我得到:NoMethodError:undefinedmethod`safe_constantize'for1:Fixnum我做错了什么? 最佳答案 就像这样:在Fixnum上没有名为safe_constantize的方法。type用于SingleTableInheritance.您通常会在应用程序中将已知模型的字符串表示形式作为type值。参见railsguides
我正在尝试创建一个继承自ActiveRecord::Base的新类,该类需要从字符串中动态生成"general_systems".camelize.singularize=Class.new但是我一直收到错误:undefinedmethod`singularize='for"GeneralSystems":String我也尝试过常量化字符串>>foo="general_systems".camelize.singularize=>"GeneralSystem">>foo.constantizeNameError:uninitializedconstantGeneralSystemfro
我在模块的命名空间下有一个类,比如说Module::Klass我能够从控制台访问Klass,它给了我:Module::Klass但是,如果我尝试使用:"klass".constantize#CallingconstantizeonString它会出错,因为它没有附加模块命名空间。所以,我的问题是:有没有一种方法可以根据其当前上下文将字符串常量化,以便我收到类名称及其模块? 最佳答案 如果“当前上下文”是指您当前在该模块中,则可以直接访问其常量。moduleFooclassBarendself.const_get('Bar')#=>F
我有一个需要初始化的类,但它的命名空间如下:SomeThing::MyClass.new()但我在rake任务中从args调用它,所以它以字符串形式出现:task:blah,[:my_class_name]=>:environmentdo|t,args|class_name=args[:my_class_name].camelize.constantizeputsclass_nameend很明显,如果我这样调用rake任务:rakeblah[my_class]我的任务返回:MyClass#但是我怎样才能让它从链接在另一个方法之前的命名空间中运行,就像这样:SomeThing::MyCl
NoMethodError-undefinedmethod`safe_constantize'fornil:NilClass我正在尝试按照GoRails.com上的actioncable指南创建一个ActionCable聊天室。当我尝试连接到ActionCable时,我收到以下错误:NoMethodError-nil:NilClass的未定义方法"safe_constantize"1234567891011121314151617[ActionCable][User1]Couldnotexecutecommandfrom{"command"=>"subscribe","identifier"=
NoMethodError-undefinedmethod`safe_constantize'fornil:NilClass我正在尝试按照GoRails.com上的actioncable指南创建一个ActionCable聊天室。当我尝试连接到ActionCable时,我收到以下错误:NoMethodError-nil:NilClass的未定义方法"safe_constantize"1234567891011121314151617[ActionCable][User1]Couldnotexecutecommandfrom{"command"=>"subscribe","identifier"=