NoMethodError In Ruby - PullRequest
       4

NoMethodError In Ruby

2 голосов
/ 07 сентября 2011

У меня немного рубинового кода:

def createCal(cal)
    mod = @on + @off #line creating error.
    @daycount = 0       
    cal
  end

Это приводит к следующей ошибке: NoMethodError в / calendar неопределенный метод `+ 'для nil: файл NilClass: main.rb расположение: строка createCal: 83

Я использую это в Синатре, и поэтому могу распечатать @on и @off на веб-странице, и я могу подтвердить, что они действительно загружаются со значениями. Я также делаю '@ooo = @on + @off' в своем шаблоне haml, и это приводит к 7, что и следовало ожидать, потому что on равен 4, а off 3.

Есть идеи?

UPDATE:

Вот как я работаю с @on и @ off

post '/calendar' do
  @on = params["on"]
  @off = params["off"]
  @date = params["date"]
  a = Doer.new
  @var = a.makeDate(@date)
  @on = @on.to_i
  @off = @off.to_i
  @ooo = @on + @off
  @cal = a.makeCal(@var)
  haml :feeling
end

Ответы [ 2 ]

2 голосов
/ 07 сентября 2011

Вы получаете доступ к двум различным переменным экземпляра:

  • @on in post - это переменная экземпляра для вашего экземпляра Sinatra.
  • @on in createCal - это переменная экземпляра из вашего экземпляра Doer .

Чтобы использовать @on и @off так, как вы хотите, вам нужно изменить их на аргументы, передаваемые вcreateCal метод.Как то так:

class Doer
  def createCal(cal, on, off)
    mod = on + off
    # more code...
    cal
  end
end

post '/calendar' do
  a = Doer.new
  date = a.makeDate params['date']
  @cal = a.makeCal date, params['on'], params['off']

  haml :some_template
end
1 голос
/ 07 сентября 2011

Ваши переменные экземпляра, вероятно, не входят в сферу применения метода. Попробуйте следующее, чтобы проверить эту теорию:

def createCal(cal, on, off, daycount)
  mod = on + off #line creating error.
  daycount = 0       
  cal
end

И назовите его (в вашем / блоке календаря) с помощью:

createCal(cal, @on, @off, @daycount)
...