#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, так как это более СУХО.