Динамические искатели могут быть неправильным способом, если некоторые из искателей фактически отсутствуют. В этом случае вам, вероятно, лучше использовать Article.find(:all, :conditions => {})
на Rails 2 и Article.where()
на Rails 3.
Вот метод, который я придумал для другого вопроса некоторое время назад:
conditions = [:attr1, :attr2].inject({}) do |hsh, field|
hsh[field] = params[field] if params[field] && params[field].present?
hsh
end
# Rails 2
@articles = Article.find(:all, :conditions => conditions)
# Rails 3
@articles = Article.where(conditions)
В приведенном выше случае вы перебираете все поля в массиве и добавляете каждое из них в результирующий хеш, если он есть и не пуст в params
. Затем вы передаете хеш искателю, и все в порядке.