2

Rubyコードが少しあります:

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

これにより、次のエラーが生成されます: NoMethodError at /calendar undefined method `+' for nil:NilClass file: main.rb location: createCal line: 83

私は Sinatra でこれを使用しているので、@on と @off を Web ページに出力でき、実際に値がロードされていることを確認できます。また、haml テンプレートで '@ooo = @on + @off' を実行すると、on が 4 で off が 3 であるため、7 が生成されます。

何か案は?

アップデート:

@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
4

2 に答える 2

2

2 つの異なるインスタンス変数にアクセスしています。

  • @oninは Sinatra インスタンスのpostインスタンス変数です。
  • @oninはDoerインスタンスからのcreateCalインスタンス変数です。

必要に応じて使用するには、それらをメソッドに渡される引数に変更する必要が@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
于 2011-09-06T20:47:04.850 に答える
1

インスタンス変数は、おそらくメソッドのスコープ内にありません。この理論をテストするには、次のことを試してください。

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

そして、それを (/calendar ブロックで) 次のように呼び出します。

createCal(cal, @on, @off, @daycount)
于 2011-09-06T20:31:57.820 に答える