hyperlink - Ruby Sinatra storing variables -
in code below, initial '/' contains form, action post '/'. when user inputs number, should converted variable used call game class, have generated action reveal new form @ '/game'. variable generated in post method not being stored. how can both store variable created in post , link '/game' action?
require 'sinatra' require 'sinatra/reloader' @@count = 5 dict = file.open("enable.txt") class game attr_accessor :letters, :number, :guess, :disp @@count = 5 def initialize (number) letters = find(number) end def find (n) words =[] dictionary = file.read(dict) dictionary.scan(/\w+/).each {|word| words << word if word.length == n} letters = words.sample.split("").to_a letters end def counter if letters.include?guess correct = check_guess(guess, letters) else @@count -= 1 end end end '/' erb :index end post '/' n = params['number'].to_i @letters = game.new(n) redirect '/game' end "/game" guess = params['guess'] letters = @letters if guess != nil correct = check_guess(guess, letters) end disp = display(letters, correct) erb :game, :locals => {:letters => letters, :disp => disp} end def display(letters, correct) line = "__" d=[] letters.each |x| if correct == nil d << line elsif correct.include?x d << x else d << line end end d.join(" ") end def check_guess(guess, letters) correct = [] if guess != nil if letters.include?guess correct << guess end end correct end
you cannot this:
@letters = game.new(n)
each time create request, , new request instance created , @letters
attribute no longer exists.
it's equivalent of
r = request.new() r.letters = game.new() r = request.new() r.letters # not defined anymore!!
you achieve want using class variable instead
@@letters = game.new(n)
although become nightmare when have multiple users , work when have single ruby server process.
a more advanced approach store params['number']
in session cookie or in database.
Comments
Post a Comment