0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Railsで「undefined method `-' for "1":String Did you mean? -@」と表示された時の対処方法

Posted at

発生した問題

ルーティング(routes.rb)とビュー(answer.html.erb)の間で値渡しを行うコントローラーを記述していた際に問題が発生しました。

エラーメッセージ

undefined method `-' for "1":String Did you mean? -@

ネットでググり、「undefined method」これは初歩的なスペミスか、定義されていない変数やクラスへのアクセスなどの可能性がある、という情報は理解しました。しかし「-」(マイナス)がメソッドとして「undefined」という意味に戸惑い、状況が理解できませんでした。

question_and_answers_controller.rb
  def answer
    @course = params[:course]
    @scene = params[:scene]
    question_number = (@course - 1) * 5 + @scene
    qa = QuestionAndAnswer.find_by(id: question_number)
    @answer = qa.answer
    @next_scene = @scene + 1
  end
routes.rb
Rails.application.routes.draw do
  get 'answer/:course/:scene' => 'question_and_answers#answer'

なぜ数値の1が"1"と文字扱いになっているのかもわかりませんでした。
しかしここにヒントがありました。
単純にシンプルに理解し、文字と認識されているなら、と数値に変換してみました。

question_and_answers_controller.rb
  def answer
    @course = params[:course].to_i
    @scene = params[:scene].to_i
    question_number = (@course - 1) * 5 + @scene
    qa = QuestionAndAnswer.find_by(id: question_number)
    @answer = qa.answer
    @next_scene = @scene + 1
  end

これでうまくいきました。ルーティングのアドレスで渡される値は文字として認識されているということがわかり、新たな気づきがありました。
今後は気をつけたいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?