ruby-on-rails - 在调用之前检查方法/属性是否被定义

标签 ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

我是 RoR 的新手。我想弄清楚如何检查环境文件(在本例中为 development.rb)中是否定义了属性。

我们在 development.rb 文件中定义了一个属性,类似于:

config.user = 'test-user'

现在在代码中,我通过调用来使用它:

 Rails.application.config.user

这给了我所需的值(value)。

但问题是这个配置有时可能会被禁用。所以,我想在分配之前检查这个属性是否被定义。 有点像

user_name = (if Rails.application.config.user is available)? 
             Rails.application.config.user : 'some_other_value'

我试过定义了吗?和 respond_to 但没有用。

如有任何帮助/建议,我们将不胜感激。谢谢!

最佳答案

如果您使用的是 Rails(它实际上来自 active_support),每个对象都会有一个 try 方法,它也可以执行您想要的操作:

user_name = Rails.application.config.try(:user)

ruby 2.3 为我们带来了&.:

user_name = Rails.application.config&.user

请注意,在这两种情况下,如果 nil 不是有效的用户名(因为 try&.,您可以隐式使用返回值如果 config 没有响应 user,将返回 nil:

user_name = Rails.application.config&.user || 'Guest' # ruby >= 2.3.0
user_name = Rails.application.config.try(:user) || 'Guest'

如果您多次调用该段代码(我的经验法则),您应该考虑将其提取到自己的方法中,例如应用程序#user_name

更正

事后想来,我认为 &. 在这里可能不会像预期的那样工作,因为 config 可能不是 nil。这实际上取决于设置(user 是否已配置,但为空?config 是如何实现的?)。我保留了那部分答案,因为相关问题可能会对它感兴趣(但请记住:您需要 ruby​​ 2.3 或更高版本)。

关于ruby-on-rails - 在调用之前检查方法/属性是否被定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38909239/

相关文章:

ruby-on-rails-3 - link_to中的特殊字符

ruby-on-rails - 添加要设计的值名称时出错

ruby-on-rails - 这个 gem 存在吗?

ruby-on-rails - 时间可用性比较,使用 Ruby on Rails

ruby-on-rails - 我应该使用模板来呈现 JSON 还是在 RoR 中使用 Controller 返回 JSON?

ruby-on-rails - rails : How can I set the route for a method which doesn't require an :id parameter but instead requires 2 query parameters

ruby-on-rails - 无方法错误 : undefined method `fetch' for "QLite version 3.x":String

jquery - Rails 在保存到数据库之前弹出窗口

ruby-on-rails - ASP.NET MVC : Passing instance variables to the View like in Ruby

ruby-on-rails - 为什么 ?format=csv 文件没有扩展名