Поместите метод многократного использования в какой-то модуль рядом с вашим классом DVD.Позже вы можете переместить его в отдельный файл.
# app/models/dvd.rb
module CaseInsensitiveSearch
def case_insensitive_search(field, value)
# searching field for value goes here
end
end
class Dvd
end
После расширения класса модулем вы можете использовать case_insensitive_search для этого класса.Включение модуля сделает case_insensitive_search методом экземпляра, который вам не подходит.
class Dvd
extend CaseInsensitiveSearch
end
Dvd.case_insensitive_search("title", "foo")
И, конечно, вы можете использовать его внутри класса DVD.
class Dvd
def self.search(query)
case_insensitive_search("title", query)
end
end
Dvd.search("foo")
Теперь, когда вы убедились,это работает, вы, вероятно, захотите переместить его в отдельный файл и использовать его в нескольких классах.Поместите его в lib / case_insensitive_search.rb и убедитесь, что у вас есть эта строка в config / application.rb:
config.autoload_paths += %W(#{config.root}/lib)
Теперь вы можете требовать ее везде, где хотите:
require 'case_insensitive_search'
class Dvd
extend CaseInsensitiveSearch
end
Последнее, что я хотел бы предложить.Создайте несколько модулей со значимыми именами.Поэтому вместо CommonModel есть CaseInsensitiveSearch и т. Д.