Ruby on rails 对rails中的一个对象进行会话计数并显示它
我正在尝试创建一个应用程序,可以记录用户的正确答案并显示它们。如何为会话访问并显示它。我将计数设置为全局变量,这可能是错误的 我的应用程序会随机询问一个问题,如果用户点击正确答案,它会用新问题重新加载页面。如果不正确,它将引导他们进入新页面。如何显示正确的答案计数 我的用户和会话的设置与michael hartl的ruby on 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
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社区是蜜蜂的膝盖。一旦我成功,我会在这里发布应用程序的链接完成了。