如何检查是否定义了Rails.application.config变量?

Ali*_*orm 1 ruby ruby-on-rails ruby-on-rails-4

即使Rails.application.config.trackable_models返回完整数组,也defined?(Rails.application.config.trackable_models)返回nil。

Rails.application.config.trackable_models # => ["NewsItem", "ContentPage", "Event"]
defined?(Rails.application.config.trackable_models): # => nil 
Run Code Online (Sandbox Code Playgroud)

以相同的方式设置局部变量就可以了:

foo = ["x"]
defined?(foo) # => local-variable
Run Code Online (Sandbox Code Playgroud)

如果未“定义”,检查配置变量是否存在的正确方法是什么?

ste*_*eel 5

如果要检查按字面意义定义的方法,请使用 respond_to

Rails.applications.config.respond_to?(:trackable_models)
Run Code Online (Sandbox Code Playgroud)

如果要检查方法是否返回以外的值nil,则可以使用以下选项:

tm = Rails.applications.config.trackable_models
tm.nil?
tm.presence || 'default value'
tm.present?
tm.blank?
Run Code Online (Sandbox Code Playgroud)

  • 谢谢@steel ... `respond_to?` 工作完美。假设 trackable_models 已定义,其余部分很有用,否则对 `Rails.applications.config.trackable_models` 的任何调用都会导致“未定义的方法 'trackable_models'” (2认同)