Ruby on rails 在Rails中重写实例方法
在重写某些赋值方法时,我发现如果在field_-two方法中使用隐式receiver,则不会调用第一个重写的方法field_-one。相反,似乎调用了默认的“field_one=”Ruby on rails 在Rails中重写实例方法,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,在重写某些赋值方法时,我发现如果在field_-two方法中使用隐式receiver,则不会调用第一个重写的方法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)
#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
这里发生了什么?没有调用默认的field\u one,您正在方法中设置一个名为field\u one的局部变量
如果要明确表示要在该类中调用field\u one方法,则必须在其前面加上self。如果未调用默认的field\u one,则在该方法中设置一个名为field\u one的局部变量
如果要明确表示要在该类中调用field\u one方法,则必须在其前面加上self。调用范围中是否有另一个变量名为field\u one?我的编辑是否回答了您的问题?我不太清楚你的意思。@TarynEast不要紧。他正在创建一个。在调用范围中是否有另一个变量以字段\ one命名?我的编辑是否回答了您的问题?我不太清楚你的意思。@TarynEast不要紧。他正在创造一个。
def field_two=(value)
self.field_one="whatever"
write_attribute(:field_g_one,value)
end