Рельсы: Дополнительные области поиска

В моем приложении Рельсов я использую collection_select , чтобы предоставить список действительного выбора для пользователя. Я сохранил только id от посмотревшего стола. Я тогда звоню посмотревшему классу на <�сильном> шоу представлению, чтобы восстановить фактическое значение для id.

в отредактируйте:

= f.collection_select :language_id, Language.find(:all, :conditions => ["supported = 't'"]), :id, :language, include_blank: false, :prompt => "Language"

на шоу:

%p
  %b Language:
  = Language.find(@article.language_id).language_code

Это все хорошо работает, если никакой выбор не сделан. Если @article.language_id область пустая, представление не может загрузить, поскольку находка терпит неудачу. Какие-либо предложения о том, как проигнорировать нулевые значения и покинуть поле бланк?

0
добавлено отредактировано
Просмотры: 2
nl ja de

2 ответы

использование find_by_id был бы выбором, поскольку это не поднимает ошибку, если id не мог бы быть найден.

это издает приказ к базе данных все же.

таким образом, я просто проверил бы languange_id и предоставил бы дефолт

= @article.language_id.nil? ? default : Language.find_by_id(@article.language_id)

это могло также быть перемещено в модель или помощника, так, чтобы она не загромождала ваш код представления.

1
добавлено
Прекрасный. Точно, что я искал.Thank you.
добавлено автор ardochhigh, источник

Это - типичная проблема. Просто используйте попытку , чтобы оставить нулевые ценности:

 if @article.try(:language_id) != nil
      @code = Language.find(@article.language_id).language_code
    else
      //default nil
      @code = nil
  end
0
добавлено
правильный я стараюсь избегать сообщения об ошибке.
добавлено автор ardochhigh, источник
хорошо, я обновил код. Это должно работать на вас применяющий условия.
добавлено автор My God, источник
найдите поднимает ошибку, если ID не мог бы быть найден, таким образом, эта работа привычки
добавлено автор phoet, источник