Рефакторинг методов модели в Ruby On Rails - PullRequest
4 голосов
/ 03 апреля 2009

Обычная идиома, которую мой лагерь использует в рельсах, такова:

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

как я могу сделать это лучше / быстрее / сильнее?

ТНХ

-C

Ответы [ 2 ]

13 голосов
/ 03 апреля 2009
def right_things(all_things, value)
    all_things.select{|x| x.attribute == value}
end
1 голос
/ 03 апреля 2009

Если ваши вещи являются моделями ActiveRecord, и вам нужны только предметы, выбранные для вашей текущей цели, вы можете, если вы используете Rails 2.0 (определенно 2.1) или выше, найти named_scope s полезным.

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

Так что вы можете сказать

Thing.rightness(123)

, что (в данном случае) похоже на

Thing.find_by_attribute(123)

в том смысле, что он сводится к запросу SQL, но его проще модифицировать в цепочке. Если это полезно для вас, чего не может быть, конечно ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...