Как мне избежать NIL с динамическим искателем, когда атрибут появляется как NIL?

StackOverflow https://stackoverflow.com/questions/4753996

Вопрос

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. Анкет Затем вы передаете хэш искателю, и все в порядке и денди.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top