2016-08-12 12 views
1

私はRoRの初心者です。環境ファイル(この場合はdevelopment.rb)にプロパティが定義されているかどうかを調べる方法を解明しようとしています。呼び出すことによって 呼び出す前にメソッド/プロパティが定義されているかどうか確認してください。

config.user = 'test-user' 

は今のコードで、私はそれを使用します:

は、我々はdevelopment.rbファイルで定義されたプロパティ、のようなものを持っている私に必要な値を与える

Rails.application.config.user 

を。

ただし、この設定が無効になることがあります。だから、私はこのプロパティが定義されているかどうか、それを割り当てる前にチェックしたいと思います。 のようなもの

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

私は定義しましたか? respond_toでも動作しませんでした。

ご協力いただきありがとうございます。ありがとう!そこにすべての環境で定義されてconfig.userですが、時にはそれが値を持ち、時にはそれは、例えば、それはnilことができないか、または空の文字列は、あなたが使用できる場合は

答えて

1

present?

Rails.application.config.user.present? 

それが定義されていない場合は、それを救うことができますので、あなたは、上記の場合NoMethodErrorを取得します:

begin 
    user_name = Rails.application.config.user.present? ? Rails.application.config.user : 'some_other_value' 
rescue NoMethodError 
    user_name = 'some_other_value' 
end 

respond_to?はまた、あなたがと混同しないことを確認してくださいだけで、動作するはずです10、is a Rails method。あなたはすべてのオブジェクトにも何をしたいんtryメソッドを持つことになります(それが実際にactive_supportから来ている)レールを使用している場合は

if Rails.application.config.respond_to?(:user) && Rails.application.config.user.present? 
    user_name = Rails.application.config.user 
else 
    user_name = 'some_other_value' 
end 
+1

素晴らしい!それはうまくいった。ありがとう! –

2

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

とRuby 2.3には次のようになりますどちらの場合も、あなたは暗黙的であればnilがすべき戻り値を使用することができることを

user_name = Rails.application.config&.user 

注:私たち&.をもたらしました(configuserに応答しない場合try&.がnilを返しますので)有効USER_NAMEではない:

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

あなたが二回(親指の私のルール)よりもコードのその部分を呼び出している場合は、あなたが考慮しなければなりませんそれを独自の方法、例えばApplication#user_name。付け足しで

修正

configはおそらく皆無ではないので、私は、ここでは予想通り&.はおそらく動作しないことを考え出しました。実際は設定に依存します(userが設定されていますが、空白ですか?configはどのように実装されていますか?)。私は、それが関連する問題に関心があるかもしれないので、答えの部分を保持します(しかし、覚えておいてください:あなたは2.3以降のRubyが必要です)。

+0

あなたの答えがありがとう、私は前に '試し 'について知りませんでした。これはあなた自身で例外を救うよりも良い解決策のようです。 – p4sh4

関連する問題