我如何检查rails应用程序控制器中是否存在方法?

时间:2009-05-06 16:44:43

标签: ruby-on-rails methods

在我的应用程序控制器中,我有一个方法应该检查子类控制器中是否存在另一个方法来设置下载文件的文件名,但是我无法使其正常工作

我试过

def filename
  begin
    send "filename_method"
  rescue NoMethodError
    default_filename
  end
end

def filename
 if respond_to?("filename_method")
  send "filename_method"
 else
  default_filename
 end
end

但是两者总是返回default_filename,即使在子类控制器中定义了filename_method也是如此。有人能指出我在正确的方向吗?

谢谢,

-C

1 个答案:

答案 0 :(得分:2)

我猜这是因为控制器超类不知道子类的方法是否存在。您可以通过检查子类的methods数组来确认这一点。

似乎解决方案是重新考虑您的设计。不要检查filename_method是否存在,只需在基本filename方法中提供默认文件名行为,并覆盖子类中的filename方法以提供自定义文件名功能。

例如,在您的超类中:

def filename
  # return default file name 
end

在您的子类中:

def filename
  # return custom file name 
end