gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:37:06 27 4
gpt4 key购买 nike

在 RoR 应用程序中,我想在我的一个模型中专门化 ActiveRecord 的 update_attributes() 方法,提取一些属性进行特殊处理,并将其余属性传递给原始的 update_attributes() 方法。详情:

class Premise < ActiveRecord::Base
...
def update_attributes(attrs)
attrs.each_pair do |key, val|
unless has_attribute?(key)
do_special_processing(key, val)
attrs.delete(key)
end
end
# use original update_attributes() to process non-special pairs
super.update_attributes(attrs)
end
...
end

对 super.update_attributes(attr) 的调用引发错误:

undefined method `update_attributes' for true:TrueClass

... 这让我怀疑我真的不了解 Ruby 中的 super 关键字。我错过了什么?具体来说,如何调用原始的 update_attributes() 方法?

最佳答案

在 Ruby 中,super 是一种特殊情况,其中括号很重要...

在子类的方法中调用不带参数(也没有括号)的 super 会调用父类(super class)中的相同方法(如果父类(super class)未定义它,则调用其祖先)并传递所有参数到子类方法。所以,在这里,您可以简单地编写 super。

调用 super() 调用父类(super class)(或祖先)方法而不带任何参数(假设此方法不接受任何参数...)

使用任意参数组合调用super(...) 调用父类(super class)方法,将参数传递给它

关于ruby-on-rails - ruby /RoR : calling original method via super()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5146974/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com