Как мне избежать NIL с динамическим искателем, когда атрибут появляется как NIL?
-
15-10-2019 - |
Вопрос
link_to 'articles', articles_path, :attr1 => 'foo', :attr2 => 'bar'
И в контроллере:
Article.find_all_by_attr1_and_attr2(params[:attr1], params[:attr2])
Однако, если контроллер получает только [:attr1]
Я получаю ноль.
Решение
Динамические искатели могут быть правильным, если некоторые из искателей фактически не присутствуют. В этом случае вам, вероятно, лучше использовать Article.find(:all, :conditions => {})
на рельсах 2 и Article.where()
на рельсах 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
. Анкет Затем вы передаете хэш искателю, и все в порядке и денди.
Не связан с StackOverflow