Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 对rails中的一个对象进行会话计数并显示它_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 对rails中的一个对象进行会话计数并显示它

Ruby on rails 对rails中的一个对象进行会话计数并显示它,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在尝试创建一个应用程序,可以记录用户的正确答案并显示它们。如何为会话访问并显示它。我将计数设置为全局变量,这可能是错误的 我的应用程序会随机询问一个问题,如果用户点击正确答案,它会用新问题重新加载页面。如果不正确,它将引导他们进入新页面。如何显示正确的答案计数 我的用户和会话的设置与michael hartl的ruby on rails教程类似 controller.rb @@ruby_functs_count = 0 def ruby_functs @symbo

我正在尝试创建一个应用程序,可以记录用户的正确答案并显示它们。如何为会话访问并显示它。我将计数设置为全局变量,这可能是错误的

我的应用程序会随机询问一个问题,如果用户点击正确答案,它会用新问题重新加载页面。如果不正确,它将引导他们进入新页面。如何显示正确的答案计数

我的用户和会话的设置与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 %>
controller.rb
@@ruby函数计数=0
def-ruby_函数
@符号={
“abort”=>“终止程序。如果引发异常(即,$!不是nil),将显示其错误消息。”,
“Array(obj)”=>“使用to_ary或to_a将obj转换为数组后返回obj。”
}
@随机=[]
@随机数2=[]
rando=@symbols.sort_by{rand}

rando=rando.each{k,v{@randompfhahf,我不知道从哪里开始

是的,使用类变量如
@@ruby\u functs\u count
来存储状态不是一个好主意。这不是一个全局变量,看起来像
$ruby\u functs\u 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
session[:answered]|=[]#如果会话键为空,则初始化会话键

会话[:已回答]为什么不保存任何与用户相关的数据(以及您想要的任何计数器)在数据库中?我实际上使用了一个数据库来存储问题。谢谢,我认为这太完美了。我只在rails上工作了几个星期,但我知道必须有更好的方法。哦,是的,我的错,我是说类变量。再次感谢你的帮助:)SO社区是蜜蜂的膝盖。一旦我成功,我会在这里发布应用程序的链接完成了。