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

Popular posts from this blog

sublimetext3 - what keyboard shortcut is to comment/uncomment for this script tag in sublime -

dataset - MPAndroidchart returning no chart Data available -

java - No use of nillable="0" in SOAP Webservice -