Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails中重写实例方法_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails 在Rails中重写实例方法

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)

在重写某些赋值方法时,我发现如果在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)
  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