【问题标题】:how do i check for the existence of a method in a rails application controller?如何检查 Rails 应用程序控制器中是否存在方法?
【发布时间】:2009-05-06 16:44:42
【问题描述】:

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

我试过了

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

【问题讨论】:

    标签: ruby-on-rails methods


    【解决方案1】:

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

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

    例如,在你的超类中:

    def filename
      # return default file name 
    end
    

    在你的子类中:

    def filename
      # return custom file name 
    end
    

    【讨论】:

    • 大声笑,呃,我应该首先想到这一点,谢谢:) -C
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 2018-08-13
    相关资源
    最近更新 更多