Sra*_*mar 4 ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-4
我是 RoR 的新手。我试图弄清楚如何检查环境文件(在本例中为development.rb)中是否定义了属性。
我们在development.rb 文件中定义了一个属性,如下所示:
config.user = 'test-user'
Run Code Online (Sandbox Code Playgroud)
现在在代码中,我通过调用来使用它:
Rails.application.config.user
Run Code Online (Sandbox Code Playgroud)
这给了我所需的价值。
但问题是这个配置有时可能会被禁用。因此,我想在分配该属性之前检查该属性是否已定义。就像是
user_name = (if Rails.application.config.user is available)?
Rails.application.config.user : 'some_other_value'
Run Code Online (Sandbox Code Playgroud)
我试过定义吗?和respond_to但没有工作。
任何帮助/建议表示赞赏。谢谢!
如果您使用的是 Rails(它实际上来自active_support),每个对象都会有一个try方法,该方法也可以执行您想要的操作:
user_name = Rails.application.config.try(:user)
Run Code Online (Sandbox Code Playgroud)
ruby 2.3 给我们带来了&.:
user_name = Rails.application.config&.user
Run Code Online (Sandbox Code Playgroud)
请注意,在这两种情况下,您都可以隐式使用返回值 ifnil不应该是有效的 user_name (因为try和如果不响应&.则返回 nil ):configuser
user_name = Rails.application.config&.user || 'Guest' # ruby >= 2.3.0
user_name = Rails.application.config.try(:user) || 'Guest'
Run Code Online (Sandbox Code Playgroud)
如果您调用该代码段两次以上(我的经验法则),您应该考虑将其提取到自己的方法中,例如Application#user_name.
更正
事后想来,我认为这&.可能不会按预期工作,因为config可能不是零。这实际上取决于设置(已user配置,但为空?如何config实现?)。我保留了答案的这一部分,因为它可能对相关问题感兴趣(但请记住:您需要 ruby 2.3 或更高版本)。