【问题标题】:Overriding instance method in Rails [duplicate]在Rails中覆盖实例方法[重复]
【发布时间】:2014-08-21 13:28:18
【问题描述】:

在覆盖一些赋值方法时,我发现如果我在 field_two 方法中使用隐式接收器,第一个被覆盖的方法 field_one 不会被调用。相反,似乎调用了默认的 'field_one='。

#controller
def do_something
  @something=Something.first
  @something.field_two="some_value"
end

class Something<ActiveRecord::Base

def field_one=(value)
  puts "hi"
  write_attribute(:field_g_five,value)
end


def field_two=(value)
  field_one="whatever"
  write_attribute(:field_g_one,value)
end

end

但是,如果我将接收器更改为显式,我的重写方法会被调用:

def field_two=(value)
  self.field_one="whatever"
  write_attribute(:field_g_one,value)
end  

这是怎么回事?

【问题讨论】:

  • 在调用范围内是否还有另一个名为 field_one 的变量?
  • 我的编辑回答了你的问题吗?我不太清楚你的意思。
  • @TarynEast 没关系。他正在创造一个。

标签: ruby-on-rails ruby activerecord


【解决方案1】:

默认的field_one 没有被调用,您在方法中设置了一个名为field_one 的局部变量。

如果要明确表示要在该类中调用 field_one 方法,则必须在其前面加上 self

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 2012-07-19
    • 1970-01-01
    • 2017-10-06
    • 2010-09-28
    • 1970-01-01
    • 2011-01-04
    相关资源
    最近更新 更多