Cookie に関する Rails 4 の問題があり、解決策がなく、一日中頭痛の種になっています。Cookie の値が変化するか、他の変数の値に影響を与えているようです。私は Rails とプログラミング全般に不慣れであり、Cookie を誤用していると思われますが、これが機能することは確かに素晴らしいことです。
アプリにはカードのデッキがあり、小さな山を作り、その山からカードを選択します。カードの選択でエラーが発生します。
すべてのコードは application_controller.rb にあります。card_ids の cookie[:pile] 配列を文字列として保存し、必要に応じて配列化しています。
このコードは機能します:
def select_card_id
@pile = cookies[:pile].split(',')
i = rand(@pile.length - 1)
@id = @pile[i]
end
出来上がり。毎回パイルからランダムなカード。
カードをよりランダムな順序で循環させたい場合、アプリは次にどのカードを引くべきかを知る必要があり、そこで Cookie が失敗します。
このコードは、@pile 変数を意味する「undefined method `<' for nil:NilClass」というエラーで失敗します。
def select_card_id
@pile = cookies[:pile].split(',')
i = cookies[:index]
if i < @pile.length
@id = @pile[i]
cookies[:index] += 1
else
cookies[:index] = 0
@id = @pile[0]
end
end
cookies[:index] を強制的に整数にすると、プロットが濃くなります。これは、以前に 0 に設定したため、2 度奇妙であり、エラーの原因ではありませんでしたが、アプリは @pile が nil であることについて煮詰めています。
このコードは、「id=3 のカードが見つかりませんでした」というエラーで失敗します。
def select_card_id
@pile = cookies[:pile].split(',')
i = cookies[:index].to_i
if i < @pile.length
@id = @pile[i]
cookies[:index] = i + 1
else
cookies[:index] = 0
@id = @pile[0]
end
end
それが参照しているコードは、「テスト」コントローラーの「新規」アクションで次のとおりです。
@id = select_card_id
@card = Card.find(@id)
それについて奇妙なのは、card_id が 3 ではなく、1 桁でさえないだけでなく、多くの試行錯誤の後、Cookie が変数の最初の桁を切り捨てていることに気付きました。このインスタンスで選択された @id は 3 ではなく、33 でした。@id が 40 の場合、0 を探します。
どんな助けでも大歓迎です、ありがとう。