2011-07-14 12 views
0

数字を推測するゲームを構築しようとしています。 間違えた場合は、あなたの名前を入力して別のコントローラ(ゲーム)からのセッションデータがあらかじめ入力されており、両方にDBに送信されているリーダーボード(mvc)フォームにリダイレクトされます。異なるコントローラからの変数へのアクセス

@round & @pointsは、スコアとレベルとしてアクセスして保存する2つの変数です。

class ApplicationController < ActionController::Base 


    before_filter :set_current_account 

    def set_current_account 
    # set @current_account from session data here 
    Game.current = @round 
    end 


    protect_from_forgery 

end 

-

class Leaderboard < ActiveRecord::Base 
    cattr_accessor :current 
end 

# == Schema Information 
# 
# Table name: leaderboards 
# 
# id   :integer   not null, primary key 
# name  :string(255) 
# score  :string(255) 
# level  :string(255) 
# created_at :datetime 
# updated_at :datetime 
# 

-

class GameController < ApplicationController 

    def index 
    @games = Game.all 
    respond_to do |format| 
     format.html 
    end 
    end 

    def start_game 
    session[:round] ||= 1 
    session[:points] ||= 0 
    @round = session[:round] 
    @points = session[:points] 
    end 


    def generate_round 
    numbers = Array.new(6){rand(9)} 
    @addition = [] 
    @display = numbers 
    numbers.inject do |s, i| 
     @addition << s + i 
     @addition.last 
    end 
    end 

    def next_round 
    session[:round] += 1 
    session[:points] += 1200 
    @round = session[:round] 
    @points = session[:points] 
    end 

    def destroy_sessions 
    session[:round] = nil 
    session[:points] = nil 
    session[:addition] = nil 
    @round = session[:round] 
    @points = session[:points] 
    @addition = session[:addition] 
    start_game 
    end 

    def submit_name 
    @game = Game.new(params[:game]) 

    respond_to do |format| 
     if @game.save 
     format.html { redirect_to(leaderboard_path, :notice => 'Score was added successfully.') } 
     else 
     format.html { render :action => "new" } 
     end 
    end 
    end 

    def game_over 
    redirect_to :controller => 'leaderboards', :action => 'new' and return 
    end 

答えて

1

私はすべてを読んでいませんが、それらの変数にアクセスしたいだけなら、パラメータとして渡すことができます。

redirect_toリダイレクトする

  • 使用こののparamsとしてgame_overにそれらの値を渡します:コントローラ=> 'リーダーボード':アクション=> '新しい' とリターンを、:また、新しいゲームが開始されるかスコアボードがリーダーボードに記録されるまで、セッションを維持することができます。

  • +0

    答えをありがとう、私はいくつかのものを交換した後に動作するように見えた。 - > redirect_to:controller => 'leaderboards'、:action => 'new'、:level => session [:round]、:score => session [:points]を返して –

    +0

    Wootを返します。申し訳ありませんが、どこかからredirect_toを取得してパラメータを追加しました。私はもっ​​と慎重にすべきだった。 :) –

    0

    私はあなたにも、動作しないべきは、ここでのアプローチを取ったと思います。 Rails MVCフレームワークは、各リクエストが独立して処理され、理論的には、paramsが渡され、データベースに格納されたレコードと永続ユーザーsession以外の1つのリクエストから次のリクエストへの状態転送が行われないという原則に基づいて構成されます。

    シングルプロセス、シングルユーザー、シングルセッションプログラムのようなWebベースのアプリケーションを設計するのは間違いです。あなたのcattr_accessorのようなシングルトンを使うとcurrentと呼ばれます。これはリクエスト間で共有され、一般に多くのRailsインスタンスで共有されないので問題になります。

    マッピングより密接indexnewcreateshoweditupdatedestroyのRESTの標準に役立つだろう。例えば、start_gamecreateで、destroy_sessionsはおそらくdestroyであるはずです。

    各ゲームが複数のユーザーの間で共有されているか、ユーザーごとに個別に作成されているかどうかは明確ではないため、問題を解決する方法についてさらに詳しく述べるのは難しいです。

    +1

    私はこの全体を構築するために間違ったアプローチをとっていることを知っています。私は基本的に純粋なルビーをレールに移植し、それを動作させるために様々な回避策を実装しようとしました。この時点で、私はこの最後の機能を追加しました。週末には、座って最初からRailsを学ぶつもりです。 –

    関連する問題