0

Rails は初めてなので、今しばらくお待ちください。クラスの割り当てのために、「秘密の数字を当てる」ゲームと「じゃんけん」ゲームを含む非常に基本的な Web アプリ (データベースなし) を作成する必要がありました。この時点で、両方のゲームがすべて完了しましたが、もう少し進んで、アプリのどの部分にいても画面の上部に表示される単純な「現在のスコア」項目を追加したいと思いました。ゲームごとにスコアを追跡します。基本的に、サーバーを再起動するとスコアが更新されます。

私の最初の本能は、アプリケーション コントローラーで @score というインスタンス変数を作成することでしたが、アプリケーション コントローラーの子であるにもかかわらず、ゲーム コントローラーはその変数を認識できません。だから私は単にそれを私のゲームコントローラに追加しようとしました - それは正しく「10」の開始値をもたらしましたが、リフレッシュを押すたびに値をリセットしました。さて、今私は立ち往生しています。

この場合のインスタンス変数の使用は間違っていると思います。アプリのどこにいてもインクリメントまたはデクリメントできる、ある種のグローバルにアクセス可能な変数に格納することは理にかなっています。したがって、アプリケーションコントローラーに存在する必要があることは理にかなっているように見えますが、アプリの各部分でアクセスできるようにするという問題に直面しています。

これが十分に明確であることを願っています。基本的な質問は次のとおりだと思います: 誰かがアプリを起動した瞬間から変数を 0 に初期化し、サーバーを再起動するまでその数値を永続的に増減できるようにしたい場合、どうすればそれを行うことができますか? 変数はどこに作成され、アプリ内の他のポイントからアクセスするにはどうすればよいですか?

ありがとう!

4

2 に答える 2

0

これを行う非常に簡単な方法は、環境変数を使用することです。

config/initializers/score.rb

SCORE_CONFIG = YAML.load_file("#{::Rails.root}/config/score.yml")[::Rails.env]

config/score.yml

development: &default
 score: 0

test: 
 <<: *default

production:
 <<: *default

任意のビューで:

<%= SCORE_CONFIG["score"] %>

任意のコントローラー アクションで:

SCORE_CONFIG["score"] += 1

サーバーが実行されている場合、アプリは変数の現在の状態を継続しscoreますが、サーバーを再起動するとデフォルトで 0 に戻ります。

于 2013-10-22T05:05:58.690 に答える