Вопрос для новичков: элегантный способ справиться с нулевыми значениями в циклах .each? - PullRequest
3 голосов
/ 12 октября 2010

Просто вмешиваюсь в Rails в данный момент и пытаюсь выяснить, как избежать ошибок «у ​​вас нулевой объект, когда вы этого не ожидали». В данный момент я избегаю каждого из них с помощью «разве object.nil?» сообщение, но это становится довольно уродливым. Показательный пример:

unless params[:professiontypeinfo].nil?
  unless params[:professiontypeinfo][professiontypeid].nil?
    unless params[:professiontypeinfo][professiontypeid]["industrybodies"].nil?
        @professional.professional_specialties.find_by_profession_type_id(professiontypeid).industry_bodies = IndustryBody.find_all_by_id(params[:professiontypeinfo][professiontypeid]["industrybodies"])
    end
  end
end

Так ... какой правильный / изящный способ избежать этих вещей?

Ответы [ 2 ]

4 голосов
/ 12 октября 2010

Hash[] возвращает false, если запрошенный ключ отсутствует, поэтому

if params[key]

вернет false, если params не имеет key

And-ed условия короткого замыкания (т.е. прекратить оценку, когда первое условие ложно), поэтому следующее будет работать, даже если key отсутствует:

if params[key] && params[key][sub_key]
2 голосов
/ 12 октября 2010

Приведенный ниже метод оценит каждое условие по порядку и выйдет, если условие не выполнится, не перейдя к следующему

unless params[:professiontypeinfo] && params[:professiontypeinfo][professiontypeid] && params[:professiontypeinfo][professiontypeid]["industrybodies"]

Обновление: на основе комментариев Джимми =]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...