我是 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/