Ошибка Ruby On Rails Не удается преобразовать Nil в строку

#ruby-on-rails #ruby

#ruby-on-rails #ruby

Вопрос:

Я продолжаю получать сообщение об ошибке не удается преобразовать nil в строку ниже приведен мой код для контроллера и просмотра, а также новые для этого какие-либо идеи или предложения относительно того, что могло бы помочь это исправить?

 class ShowDateTimeController < ApplicationController
  def display
    @title = "Some Project For Date and Time"
    @current_time = Time.now.asctime
    @current_time2 = Time.now
    t = Time.now
    @h= t.hour
    @m= t.min
    @s= t.sec
    @v= Time.now.strftime ("%B")

    t.hour.to_s

    if t.hour > 6 amp;amp; t.hour < 18
      @img = "sun.jpg"
      @name = "Good Morning The Sun Is Up"
    else
      @img = "moon.jpg"
      @name = "Good Night The Moon Is Up"


      if Time.now.month == 1
        @img_month= "jan.jpg"
      elsif Time.now.month ==2
        @img_month = "feb.jpg"
      elsif Time.now.month ==3
        @img_month = "mar.jpg"
      elsif Time.now.month ==4
        @img_month = "apr.jpg"
      elsif Time.now.month ==5
        @img_month = "may.jpg"
      elsif Time.now.month ==6
        @img_month = "jun.jpg"
      elsif Time.now.month ==7
        @img_month = "jul.jpg"
      elsif Time.now.month ==8
        @img_month = "aug.jpg"
      elsif Time.now.month ==9
        @img_month = "feb.jpg"
      elsif Time.now.month ==10
        @img_month = "oct.jpg"
      elsif Time.now.month ==11
        @img_month = "nov.jpg"
      else
        @img_month = "dec.jpg"
  

Ошибка при просмотре на локальном хосте, когда я пытаюсь получить изображение из доступного @img_month

image_tag @img_month, :class => 'img' <—- ошибка здесь да, я использовал rails delimeter <%=> , но все еще есть ошибка

Комментарии:

1. Не могли бы вы исправить отступ и добавить недостающие end инструкции?

2. Эй, просто предложение: вы могли бы использовать что-то вроде Date::MONTHNAMES[Time.now.month][0 ..2].нижний регистр «.jpg» для генерации имени файла

3. @bassneck: Существует также Date::ABBR_MONTHNAME. Но по какой-то причине в сентябре feb.jpg , так что это не сработает.

4. спасибо, Вест, вы правы, исправив отступ и добавив недостающий конец к первому набору операторов if then, помогло. теперь приложение работает идеально. спасибо всем за комментарии 🙂

Ответ №1:

end Вероятно, отсутствует после вашего первого if :

     if t.hour > 6 amp;amp; t.hour < 18
          @img = "sun.jpg"
          @name = "Good Morning The Sun Is Up"
    else
          @img = "moon.jpg"
          @name = "Good Night The Moon Is Up"
    end # <---- this one
  

Итак, @img_month не устанавливается в дневное время.

Ответ №2:

В вашем коде вы не задаете @img_month переменную, если t.hour > 6 amp;amp; t.hour < 18 значение true — это будет nil тогда.

Ответ №3:

Я думаю, всегда ли выполняется t.hour > 6 amp;amp; t.hour < 18 условие true, потому что, если это true, вы не устанавливаете переменную @img_month (поскольку переменная устанавливается только в else части).

Наличие @img_month в верхней части вашего кода, перед условиями, со значением по умолчанию устранило бы вашу проблему.

Примечание: было бы лучше, если бы вы могли передать эти находки логики представления помощникам. Просто передайте значение и напишите помощник для генерации ваших изображений. И попробуйте что-нибудь, что предложил @bassneck, так как это более СУХО.