草庐IT

objc_requires_super

全部标签

ruby-on-rails - ruby /RoR : calling original method via super()?

在RoR应用程序中,我想在我的一个模型中专门化ActiveRecord的update_attributes()方法,提取一些属性进行特殊处理,并将其余属性传递给原始的update_attributes()方法。详情:classPremise对super.update_attributes(attr)的调用引发错误:undefinedmethod`update_attributes'fortrue:TrueClass...这让我怀疑我真的不了解Ruby中的super关键字。我错过了什么?具体来说,如何调用原始的update_attributes()方法? 最佳

ruby - 调用super的super方法

是否可以在重写方法中执行类似super.super的操作?也就是绕过直系父辈的super,调用“祖parent”的super? 最佳答案 不推荐这样做,但是您想要的是可能像这样:grandparent=self.class.superclass.superclassmeth=grandparent.instance_method(:the_method)meth.bind(self).call它的工作原理是首先获取祖parent类,然后对其调用instance_method以获得代表祖parent版本的the_method的Unbo

css - Rails - @import 和 *= require 之间的区别?

所以我有一个相对简单的Rails应用程序,我想通过Bootstrap向它添加一些Material设计样式。我已将以下gem添加到我的Gemfile中:gem'bootstrap-sass'gem'bootstrap-material-design'现在它们都可以工作了,我的问题是为什么我似乎必须以不同的方式将它们添加到我的应用程序中。对于vanillaBoostrap,我只是像正常一样将它导入特定View(我认为这是正确的术语)scss文件。@import"bootstrap-sprockets";@import"bootstrap";但是对于MaterialDesigngem,我必须

ruby - bundle exec 和 require 'bundler/setup' 是否等效?

这些事情完成的是否完全相同?使用bundleexecruby​​foo.rb启动ruby​​进程将require"bundler/setup"作为foo.rb的第一行 最佳答案 在您的特定示例中,它们可以被认为是相同的,但实际上它们并不相同。bundleexec对bundler/setup没有进行的环境进行了一些更改。如果您的foo.rb从不运行子shell,或者从不尝试在子shell中运行其他ruby​​可执行文件,那么这两个版本是等效的(它们都将正确加载bundle的gem并且工作完全相同)。bundleexec的整个想法是让您

ruby - 如何使用 rspec 在 ruby​​ 中模拟 super?

我通过创建一个扩展到库类的子类来扩展现有的库。在子类中,我能够测试initialize方法中的大部分功能,但无法模拟super调用。子类如下所示。classChild如何编写rspec测试(使用mocha)以便我可以模拟super调用?请注意,我正在测试Child类中的initialize方法的功能。当提供额外参数时,我是否必须创建不调用super的单独代码路径? 最佳答案 你不能模拟super,你也不应该。当您模拟某些内容时,您正在验证是否收到了特定消息,而super不是一条消息——它是一个关键字。相反,弄清楚如果缺少super调

ruby-on-rails - 从父类(super class)调用子类方法

前言:这是在Rails应用程序的上下文中。然而,这个问题是特定于Ruby的。假设我有一个Media对象。classMedia我在几个子类中扩展了它:classImage在Media类中,我想从适当的子类中调用show的实现。因此,对于Media,如果self是一个Video,那么它将调用Video的show方法。如果self是Image,它将调用Image的show方法。我有Java背景,首先想到的是“在父类(superclass)中创建一个抽象方法”。但是,我在多个地方(包括StackOverflow)读到抽象方法并不是在Ruby中处理此问题的最佳方式。考虑到这一点,我开始了rese

ruby-on-rails - 在 `require' : no such file to load -- iconv (LoadError)

➜expertizagit:(master)✗ruby-vruby1.8.7(2011-06-30patchlevel352)[i686-darwin11.1.0]➜expertizagit:(master)✗rails-vRails2.3.14➜expertizagit:(master)✗script/server/Users/HPV/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-2.3.14/lib/active_support/inflector.rb:3:in`require':nosuchfiletoload--iconv(Load

ruby-on-rails - Rails 安装失败 : activesupport requires Ruby version >= 2. 2.2

我想创建一个新的Rails应用程序。我将rvm与ruby​​-2.1.2一起使用。我正在使用@globalgemset并计划使用bundler来管理gem依赖项。但是,geminstallrails失败了:$geminstallrailsFetching:concurrent-ruby-1.0.3.pre3.gem(100%)Successfullyinstalledconcurrent-ruby-1.0.3.pre3Fetching:minitest-5.9.0.gem(100%)Successfullyinstalledminitest-5.9.0Fetching:thread_s

ruby - 为什么 relative_require 在 Ruby 1.8.6 上不起作用?

我正在Windows7上学习Ruby(使用版本1.8.6)。当我尝试运行下面的stock_stats.rb程序时,出现以下错误:C:\Users\Will\Desktop\ruby>rubystock_stats.rbstock_stats.rb:1:undefinedmethod`require_relative'formain:Object(NoMethodError)我有三个v.small代码文件:stock_stats.rbrequire_relative'csv_reader'reader=CsvReader.newARGV.eachdo|csv_file_name|STDE

Ruby:如何从当前工作目录中获取 "require"文件?

我如何从当前文件夹中获取文件?我有一个名为sql_parser.rb的文件,其中包含一个类。我想将它包含在同一文件夹中的另一个文件中,所以我使用了:require'sql_parser'当我从该文件夹运行时失败:LoadError:nosuchfiletoload--sql_parser我尝试在该文件所在的文件夹中使用IRB并从那里请求它,但遇到了同样的问题。 最佳答案 在ruby​​1.9.x中,您可以使用require_relative方法。参见http://www.ruby-doc.org/core-1.9.3/Kernel.