Ну, я думаю, вы говорите о переопределении функции поиска, которая, вероятно, не так безопасна, но выполнима.Вы также столкнетесь с проблемами поддержки различных форматов поиска.Например, как вы будете обрабатывать Foo.find (1) и Foo.find ([1,2,3])?Чтобы сделать это безопасным способом, вы должны действительно использовать прицелы.Например, в Rails 3 вы должны сделать следующее:
class Foo
scope :country, lambda{ |country| where(country: country) }
end
Затем вы можете использовать эту область всякий раз, когда выполняете вызов для запроса Foo.Например:
Foo.country('United States').where(...).all
Если вы хотите еще больше упростить этот код, потому что вы часто его используете, вы можете создать функцию на Foo, чтобы справиться и с этим:
class Foo
def self.with_country
country(current_selected_country)
end
end
Чтобы вы могли выполнять вызовы find следующим образом:
Food.with_country.all
Используя этот метод, вы избегаете необходимости переопределять функциональность ActiveRecord по умолчанию, так что ваш код будет проще для понимания другими разработчиками, и вам не придется беспокоитьсяо поддержке множества различных форматов методов и вызовов.
Если вы хотите, чтобы это было вашим поведением по умолчанию, вы можете использовать ActiveRecord default_scope следующим образом:
class Foo
default_scope where(country: 'United States')
end
Это будет примененопри создании записи, но не при обновлении записи.