2011-07-26 8 views
1

私はこのクラスレベルのメソッドをActiveRecordモデルクラスに持っています。if/then/else条件でRubyメソッドをコード化する最も明白な方法は何ですか?

def self.is_animal_color_correct?(animal, color) 
    if AnimalColor.find_by_animal_and_color(animal.downcase, color.downcase) 
    true 
    else 
    false 
    end 
end 

私は、方法をフォーマットする最良の方法が何であるか疑問に思っています。これは冗長ではあるようですが、非常に明確です。

答えて

7

、私はこれがあなたの代わりに欲しいものだと思う:

一般に
AnimalColor.exists?(:animal => animal.downcase, :color => color.downcase) 

、あなたは限り、あなたは何もnullまたは虚偽ではないことを、truthyに対してチェックされているとして気にしてはなりません。

+0

清算と提案をありがとう。それは有り難いです - –

4
def self.is_animal_color_correct?(animal, color) 
    AnimalColor.find_by_animal_and_color(animal.downcase, color.downcase) 
end 

またRubyでtruthyもののための非truthy値と実際の値(使用可能な場合)としてnilfalseを使用することが慣用的です。 if/elseを使用すると、他の場所で役立つ可能性がある情報を積極的に破棄し、そのプロセスでより多くの作業を行うことができます。

あなたが本当に本当に本当にあなたは可能性が、あなたの方法だけtrueまたはfalseを返すようにしたい場合:

def self.is_animal_color_correct?(animal, color) 
    !!AnimalColor.find_by_animal_and_color(animal.downcase, color.downcase) 
end 

しかし、再び、これは慣用ルビーではない、と私はそれをお勧めしません。この特定の例では

+0

私はこれを理解していますが、戻り値はブール値ではありません(私が推測するものではありません)。私はこれが私の質問の一部だと思う - 私が望むものがブール値の結果であるときにオブジェクトを返すべきか?それが問題を引き起こす可能性のある状況があるかどうかを考えようとしています。 –

+0

明確で簡潔なRubyの場合、Rubyでは+1 – apneadiving

+0

、nilとfalseはif条件を渡さない2つの唯一の値です。だからちょうど良いです – apneadiving

関連する問題