0

ユーザーの正解数をカウントして表示できるアプリを作成しようとしています。セッションでこれにアクセスして表示するにはどうすればよいですか。おそらく最初から間違っているグローバル変数としてカウントを設定しています。

私のアプリはランダムな質問をし、ユーザーが正しい答えをクリックすると、新しい質問でページをリロードします。間違っている場合は、新しいページに誘導します。正解数を表示するにはどうすればよいですか?

私のユーザーとセッションは、michael hartl による ruby​​ on rails チュートリアルのように設定されています。

controller.rb

    @@ruby_functs_count = 0

    def ruby_functs
    @symbols = { 
  "abort" => "Terminates program. If an exception is raised (i.e., $! isn't nil), its error message is displayed.",
  "Array( obj)" => "Returns obj after converting it to an array using to_ary or to_a."
 }
@random = []
@random2 = []
  rando = @symbols.sort_by {rand}
  rando = rando.each { |k,v|  @random << k and @random2 << v}
  @sym = @random2[0]
  @answer = @random[0]
  @sym2 = @random[0..10].sort_by {rand}
end

sessions_controller.rb

    class SessionsController < ApplicationController

def sign_in(user)
    cookies.permanent[:remember_token] = user.remember_token
    self.current_user = user
end

def new
end

def create
    user = User.find_by_email(params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:password])
        sign_in user
        redirect_to user
    else
        render 'new'
    end
end

ruby_functs.html.erb

    <% for @random in @sym2 
     if @random == @answer
        x = cards_ruby_functs_path %>
        <li class="btn btn-small btn-info flash"><%= link_to "#{@random}", x %></li>
        <% else 
            x = cards_wrong_path %>

            <li class="btn btn-small btn-info flash"><%= link_to "#{@random}", x %></li>
 <% end %>
  <% end %>
4

1 に答える 1

0

どこから始めたらいいのかわからない...

@@ruby_functs_countはい、状態を保存するようなクラス変数を使用するのは悪い考えです。これはグローバル変数ではなく、次のようになります$ruby_functs_count(グローバル変数を使用するとさらに悪化します)。

あなたが最初にできること:

ID を使用する

回答の ID がわかれば、簡単に保存して結果を比較できます。

# application_controller
Question = Struct.new(:q, :a)
QUESTIONS = { 
  1 => Question.new("abort", "Terminates..."),
  2 => Question.new("Array( obj)", "Returns..."),
}

この例では、構造体を使用してデータを表し、それを定数に格納するため、読みやすく、次のように簡単にアクセスできます。

question = QUESTIONS[1]
question.q # => "about"
question.a # => "Terminates..."

その後、いくつかのセッション フィールドでユーザー インタラクションを追跡できます。

session[:answered] ||= [] # init the session key if it's empty
session[:answered] << params[:question_id] # store the id so that you can work on it

これがコードをさらに進めるのに役立つことを願っています。

于 2013-02-17T11:18:57.067 に答える