Ruby on rails 重写ActionDispatch::请求方法

Ruby on rails 重写ActionDispatch::请求方法,ruby-on-rails,ruby,Ruby On Rails,Ruby,我试图了解Rails中的面向对象和继承的概念,这些概念来自于过程背景,特别是我想了解如何在Rails框架中重写类中的默认行为 比如说,我想覆盖ActionDispatch::Request中的一个方法,我假设我这样做: Request < ActionDispatch::Request def method_i_want_to_override actions_to_perform end end Request

我试图了解Rails中的面向对象和继承的概念,这些概念来自于过程背景,特别是我想了解如何在Rails框架中重写类中的默认行为

比如说,我想覆盖ActionDispatch::Request中的一个方法,我假设我这样做:

Request < ActionDispatch::Request

 def method_i_want_to_override
  actions_to_perform
 end

end
Request

我很困惑如何加载它以改变ActionDispatch::Request对象的行为方式。

当您使用继承重写方法(即,您位于子类内部)时,您可以再次声明该方法,就像您所做的那样:

def method_that_exists_in_superclass
  # stuff here
end
现在,通常您不想重新实现整个方法行为,您只想做一些它已经做的事情之外的事情(或者撤销它所做的事情)。在这种情况下,您可以使用
super
调用原始方法:

def method_that_exists_in_superclass
  result = super
  result + 7 # for example... but use your imagination
end
正如您所期望的,您还可以将参数传递给super,这意味着您可以通过硬编码自己的参数来覆盖参数:

def method_that_exists_in_superclass(arg1, arg2)
  super(arg1, :foo)
end
如果在没有任何参数的情况下调用
super
,则子类方法中的所有参数都将传递给父类。这包括给定的任何块