2016-04-27 9 views
0

私はmoviesと呼ばれる映画リストを更新しようとしています。 include?を使用して、プログラムが既にリストにあるムービーを更新しようとしているかどうか、またはムービーが現在moviesに含まれていないかどうかを調べたいと思います。含めるには?私のコードで作業する

ここで更新がcase文の下にあるオブジェクト映画

movies = { 
:"Mean Girls" => 4, 
Avatar: 2, 
:"Spiderman 2" => 3, 
Shrek: 4 
} 

です。

when "update" 
    puts "Type in the movie you'd like to update" 
    title = gets.chomp 
    if movies[title.to_sym].include?(title.to_sym) 
    puts "Type in a new rating of 1-4 for that movie" 
    rating = gets.chomp 
    movies[title.to_sym] = rating.to_i 
    else 
    puts "That movie is not currently in our movie list" 
    end 

私は私がエラーメッセージを取得更新したい映画のタイトルを入力:

undefined method `include?' for 4:Fixnum 

それはどういう意味か?ここでinclude?メソッドを使用することはできませんか?

include?の後にtitle.to_symを削除しようとしましたが、それでも機能しませんでした。

ここではすべての私のコードの映画以来

movies = { 
    :"Mean Girls" => 4, 
    Avatar: 2, 
    :"Spiderman 2" => 3, 
    Shrek: 4 
} 

puts "Do you want to add a movie, update a movie ranking, display all movies and rankings or delete a movie?" 
choice = gets.chomp 

case choice 

when "add" 
    puts "Type in the movie you'd like to add" 
    title = gets.chomp.to_sym 
    if movies[title].nil? 
     puts "Type in a rating of 1-4 for that movie" 
     rating = gets.chomp.to_i 
     movies[title] = rating 
    else 
     puts "That movie is already in our list. Run the program and select update to change its rating" 
    end 
when "update" 
    puts "Type in the movie you'd like to update" 
    title = gets.chomp 
    if movies[title.to_sym].include?(title.to_sym) 
     puts "Type in a new rating of 1-4 for that movie" 
     rating = gets.chomp 
     movies[title.to_sym] = rating.to_i 
    else 
     puts "That movie is not currently in our movie list" 
    end 
when "display" 
    puts "Movies!" 
when "delete" 
    puts "Deleted!" 
else 
    puts "Error!" 
end 
+1

"[mcve]"をお読みください。 'movies'が何を含んでいるのかはわかりませんが、配列のハッシュになっているように見え、' title.to_sym'が入っているかどうかを見たいと思っています。しかし、それはちょうどあなたのコードが実行されていないか、それが問題を実証していないためです。 –

+1

エラーは 'Fixnum'(おそらく整数)に' include? 'メソッドを適用しようとしていることを意味します。 'movies [title.to_sym]'は明らかに単なる数字であり、 'include? 'メソッドを受け入れません。 – lurker

+1

** movies [title.to_sym] **はFixnumで、Fixnumにはメソッドが含まれていないのですか?...しかし、@theTinManが上で指摘したように、あなたのコードは何を知るにはあまり役に立ちません起こっている。コードをもっと表示してください。 –

答えて

2

は、あなたが値として指定したものは何でも番号をキーとして、映画のタイトルを含むハッシュでい

movies[title.to_sym] 

があなた与え理由、つまり、フィックスナム4、フィックスナムには「インクルード」がありません。方法。

あなたは、あなたのハッシュキーとして、そのタイトルを持っている場合はfalse/trueを返しますどの

movies.include?(title.to_sym) 

を言うことを意味します。ここで

2

は問題です:

movies = { 
    :"Mean Girls" => 4, 
    Avatar: 2, 
    :"Spiderman 2" => 3, 
    Shrek: 4 
} 

movies['Avatar'.to_sym] # => 2 
movies['Avatar'.to_sym].include?('Avatar'.to_sym) # => 

# ~> NoMethodError 
# ~> undefined method `include?' for 2:Fixnum 

あなたは、特定のタイトルは、あなたがこのようにそれを行うことができ、あなたのハッシュのキーかどうかを確認したい場合:

あなたは賢明なことを知って
title = 'Avatar' 
movies.key?(title.to_sym) # => true 

title = 'Blade Runner' 
movies.key?(title.to_sym) # => false 

条件付きテストのようなものを使用して:

if movies.key?(title.to_sym) 

あなたは常に値の整数を持つつもりなら、 r falseまたはnilの場合、短縮することができます:

if movies[title.to_sym] 
+0

ええ、タイトルが私のハッシュのキーであるかどうかをテストしようとしています。私が変更したとき.include?キーに?私はまだ 'include_method_test.rb:26:'

'に同じエラーメッセージを持っています:未定義のメソッド 'key?'' for 4:Fixnum(NoMethodError) – MattGoldwater

+0

あなたは私が示したことをしなかったので? –

+0

うわー、ええ、私はしなかった! – MattGoldwater

関連する問題