[Ruby] Wyłuskiwanie elementów tablicy modeli

Witam
Mam tablicę user.posts, w której trzymam wiele elementów klasy Post(id: integer, text: text, user_id: integer, title: string, created_at: datetime, updated_at: datetime)
Chcę z tego otrzymać tablicę elementów klasy Post spełniających warunek: text ~= /regexp/i OR title ~= /regexp/i
Jak coś takiego osiągnąć? Czy metoda select będzie tu użyteczna?

jakoś tak:

reg = /regexp/i
tablica_postów.select{|post| post.text =~ reg || post.title =~ reg }
  1. to baza danych odpowiedzialna jest za wykonanie regexpa na kolekcji, robienie tego przy użyciu Ruby to morderstwo serwera gdy kolekcja urośnie (zeżre całą pamięć)
  2. można zastosować named_scope, będzie ładniej niż select

[code=ruby]class Post

named_scope :matching_text, lambda { |text|
unless text.blank?
{ :conditions => [“text like ? OR title like ?”, “%#{text}%”, “%#{text}%”] }
end
}

end

użycie

Post.matching_text(“test”).all[/code]

A ten kod zadziała pod Rails 3 i potem w Rails 3.1? W jakimś którymś ze screencastów się natknąłem na wiadomości, że w nowym ActiveRecord :conditions zastąpiła metoda #where.
Jeśli w modelu mam zapisane, że User ma wiele Postów i Post należy do Usera, to czy da się wyodrębnić szukane wiadomości operacjami na tablicy user.posts, czy muszę działać SQLem bezpośrednio na modelu Post?

…tylko zwróć uwagę, że w przykładzie nie jest regexp tylko jego SQLowy odpowiednik, gdzie znakami specjalnymi jest procent i podkreślenie.

Możesz (i powinieneś) zrobić:

user.posts.where(...)

lub jeszcze lepiej ze scopem.

@hekto5
Dzięki śliczne, działa.