覆盖ActionDispatch :: Request方法

时间:2011-07-02 02:24:00

标签: ruby-on-rails ruby

我试图从程序背景中了解Rails中面向对象和继承的概念,特别是我想了解如何在Rails框架中覆盖类中的默认行为。

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

Request < ActionDispatch::Request

 def method_i_want_to_override
  actions_to_perform
 end

end

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

1 个答案:

答案 0 :(得分:1)

当您使用继承覆盖方法时(即您在子类中),您可以再次声明该方法,就像您所做的那样:

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,则子类'方法中的所有参数都将传递给父类。这包括给出的任何块。