2009-04-02 1 views
4

次のように私のキャンプは、レールに使用する一般的なイディオムは次のとおりです。リファクタリングモデルメソッド

def right_things(all_things, value) 
    things = [] 
    for thing in all_things 
     things << thing if thing.attribute == value 
    end 
    return things 
end 

は、どのように私はこれより良い/より速く/強くすることができますか?

THX

-C

答えて

13
def right_things(all_things, value) 
    all_things.select{|x| x.attribute == value} 
end 
1

あなたの事はActiveRecordのモデルであり、あなたはRailsの2.0(?間違いなく2.1を使用している場合にのみ、あなたがかもしれない、あなたの現在の目的のために選択した項目を必要とする場合)以上であれば、named_scopeが便利です。

class Thing 
    named_scope :rightness, lambda { |value| :conditions => ['attribute = ?', value] } 
end 

だから、あなたはそれがSQLクエリに沸くが、それはより簡単にチェーン可能だという点で、(この場合は)

Thing.find_by_attribute(123) 

に似ている、

Thing.rightness(123) 

を言うことができますSQLを変更します。それが当然ではないかもしれない、あなたにとって有益なのであれば...