У меня есть родительский класс в рельсах, который наследуется от ActiveRecord :: Base.Я пытаюсь реализовать поиск в свободном тексте и другие запросы в этом классе, чтобы все классы, наследующие его, могли использовать его со своими собственными полями, которые меняются в зависимости от модели:
#
# in base class
#
class GenericBase < ActiveRecord::Base
named_scope :freetext, lambda { |query|
if query.present?
{ :conditions => [ self.freetext_fields.join(' LIKE ? or '),
( ["%#{query}%"]*self.freetext_fields.size ) ].flatten }
else
{}
end
}
end
#
# in inheriting class
#
class Person < GenericBase
set_freetext_fields %w(firstname lastname username email)
end
# or
class Address < GenericBase
set_freetext_fields %w(street city)
end
#
# in controller
#
def search
@people = Person.freetext(params[:query])
end
ВВ приведенном выше примере, как мне реализовать установщик set_freetext_fields
, чтобы его можно было легко использовать во всех моделях, наследуемых от GenericBase
?Это должно быть что-то очень похожее на set_table_name
, доступный в Rails.
Я хочу реализовать его в родительском или смешанном модуле так, чтобы API для наследования классов был максимально чистым.