Si esto es Rails 3 puede usar Arel's matches
. Esto tiene la ventaja de ser una base de datos independiente. Por ejemplo:
Question.where(Question.arel_table[:content].matches("%#{string}%"))
Esto es algo torpe, pero fácilmente extraído para ámbitos, por ejemplo .:
class Question
def self.match_scope_condition(col, query)
arel_table[col].matches("%#{query}%")
end
scope :matching, lambda {|*args|
col, opts = args.shift, args.extract_options!
op = opts[:operator] || :or
where args.flatten.map {|query| match_scope_condition(col, query) }.inject(&op)
}
scope :matching_content, lambda {|*query|
matching(:content, *query)
}
end
Question.matching_content('farming', 'dancing') # farming or dancing
Question.matching_content('farming', 'dancing', :operator => :and) # farming and dancing
Question.matching(:other_column, 'farming', 'dancing') # same thing for a different col
Por supuesto que se unan a "Y" que sólo podría encadenar los ámbitos.
Editar: +1 a metawhere y squeel aunque (no han probado esto último pero parece genial) Ambos agregan este tipo de funcionalidad y mucho más.
qué versión de Rails? – numbers1311407
Lo sentimos: Rails 3 –