単語に特定の文字が含まれているかどうかを確認する方法があります。文字列#include? 文字列オブジェクトの任意の位置に文字が含まれている場合、メソッドは true を返すはずです。ただし、私のメソッドは、文字 (char_clicked) と単語の最初の位置にある文字 (final_word) が一致した場合にのみ true を返します。たとえば、final_word パラメーターがスペインの場合、このメソッドは「S」が char_clicked の場合にのみ true を返し、char_clicked が「_pain」のいずれかである場合は false を返します。
私の痛みを和らげて、私が間違っていることを教えてください...
def correct_guess?(char_clicked, final_word)
puts char_clicked, final_word #p, Spain
puts final_word.is_a?(String) #true
puts "checking if string"
puts final_word.include?(char_clicked) #false
final_word.include?(char_clicked)
end
アップデート
文字列を配列にして文字をチェックしても同じ結果が得られます
puts final_word.split("").include?(char_clicked)
ただし、そのアプリケーションのコンソールでインクルードを使用すると、正常に動作します
>> s = "brazil"
=> "brazil"
>> s.include?("z")
=> true
この質問への最初の回答として、それが含まれていることを確認していますか? 上記のように機能するはずです。期待どおりに機能しない理由を説明できる情報をさらに提供します
final_word は、 correct_guess に送信される前にセッションから引き出されていますか? チェック方法。char_clicked はパラメーターから引き出されます
def check
final_word = session[:word]
char_clicked = params[:char_clicked]
correct_guess = Game.correct_guess?(char_clicked, final_word)
....
char_clicked を上記の check メソッドに送信する Ajax リクエスト
$.ajax({
url: "/check",
type: "POST",
data: {char_clicked: this.get("char_clicked")},
success: function(response) {
console.log(response);
var json = $.parseJSON(response);
if (response.incorrect_guesses >= _this.get("threshold")) _this.set({lost: true});
if (response.win) _this.set({win: true});
_this.trigger("guessCheckedEvent", response);
}
})
},