假设您正在用不同的元数覆盖子类中的方法:classAdeffoo(arg)#arityis1#doingsomethinghereendendclassB有没有办法在线获取super的元数?(实际用例:我调用super时知道父类(superclass)不接受任何参数。但是,如果父类(superclass)实现(在gem中)发生变化,我想发出警告。)感谢您的帮助! 最佳答案 关于您的实际用例:无需亲自检查参数。打电话super(arg1)如果参数计数不匹配,Ruby将引发ArgumentError。更新由于一些反对票,我想我应该回答你
如何为super调用设置一个block为nil?classAdeffooifblock_given?result=yield#dostuffwiththeyieldresultend#somemorecodeendendclassBblockcalled#=>blockcalled我不想让block两次。block_given?在类A中是否有可能返回false?背景是我不拥有A类,我无法更改它的foo方法,但我想避免调用我的block两次。我也不想将虚拟/空block传递给super,因为A的foo方法的行为在给定block时发生变化。 最佳答案
我有选择框,在更改时我需要获取值,并通过远程函数从数据库中获取一些字段名称,然后根据从选择框中选择的选项进一步生成这些字段。问题是字段在f.form_for中,所以正在使用具有选择框的formbuilderf。所以当我在Controller中通过ajax呈现部分时,我收到错误消息,因为我没有引用到本地表单生成器f。有谁知道我如何或是否可以获取对表单生成器的引用,或者是否可以在远程函数调用中传递它,然后在部分中传递给我的本地人?非常感谢,任何帮助都会很棒,因为很长一段时间以来一直停留在这个问题上!干杯rake 最佳答案 我遇到了同样的
test_module.rbmoduleMyModuledefmodule_func_aputs"module_func_ainvoked"private_bendmodule_function:module_func_aprivatedefprivate_bputs"private_binvoked"endendclassMyClassincludeMyModuledeftest_modulemodule_func_aendend从类中调用模块函数c=MyClass.newc.test_module输出1:$rubytest_module.rbmodule_func_ainvoked
我正在尝试加载按user_id分组并按created_at排序的最新10个艺术。这适用于SqlLite和MySQL,但在我的新PostgreSQL数据库上出错。Art.all(:order=>"created_atdesc",:limit=>10,:group=>"user_id")ActiveRecord错误:ArtLoad(18.4ms)SELECT"arts".*FROM"arts"GROUPBYuser_idORDERBYcreated_atdescLIMIT10ActiveRecord::StatementInvalid:PGError:ERROR:column"arts.i
在ruby中,super是keyword而不是一种方法。为什么要这样设计?Ruby的设计倾向于实现尽可能多的方法;关键字通常保留给有自己语法规则的语言特性。然而,super看起来和行为都像一个方法调用。(我知道在纯Ruby中实现super会很麻烦,因为它必须从caller或useatrace_func中解析方法名称。这单独并不能阻止它成为一个方法,因为很多Kernel的方法不是在纯Ruby中实现的。) 最佳答案 它的行为有点不同,因为如果你不传递参数,所有当前参数(和block,如果存在的话)都会被传递......我不确定这将如何作
我今晚在部署时遇到了一些问题,我正在努力尽快解决这个问题我不知道为什么会这样。在本地一切正常,但在heroku上却不行。我在研究后尝试了各种不同的修复方法,但我可能不得不求助于完全重命名此类CommentsController(希望能奏效)。最好的方法是什么?我是Rails的新手,所以我需要一些帮助来正确地进行这些更改。这是CommentsController的样子,仅供引用:classCommentsController评论与每个帖子相关联(用户可以对帖子发表评论)。如果需要,我也会发布其他代码。这是来自heroku日志的错误2013-04-09T05:55:19.454545+00
classAdefinitializeprint"Hello!"endendclassB我明白了wrongnumberofarguments(1for0)但是为什么?类B需要一个参数,我给它没问题。类A不需要任何参数,所以我根本没有通过super传递任何东西。 最佳答案 您需要使用super()才能不带参数调用它。Super本身会使用提供给自身的参数(即“名称”)自动调用父级 关于ruby-调用super时参数数量错误,我们在StackOverflow上找到一个类似的问题:
最近我发现defined?运算符有一些奇怪的行为,用于检查super关键字是否可以在当前上下文中使用。通常它工作正常,但是当我尝试组合定义的时?super用一点元编程检查,它给了我意想不到的结果。显示比描述更容易,所以这里是一个提炼的例子来说明问题:classA;defself.def_f!;singleton_class.send(:define_method,:f){defined?super}endendclassAA(A和AA类都有.def_f!类方法)A.def_f!A.f#=>nilAA.f#=>nil(A.f没有super和AA.f调度到A.f,所以到目前为止一切正常,但
如果我想在Controller内部调用函数,我应该把它们放在哪里? 最佳答案 如果您希望它在Controller本地,那么您需要做的就是将它添加到您希望使用的Controller。privatedefmyfunctionfunctioncode.....end对于所有Controller,您可以将它放在应用程序Controller中,因为所有Controller都是子类。应用程序Controllerprotecteddefmyfunctionfunctioncode.....end如果你想访问你的View,那么你可以创建一个助手应用