【发布时间】:2016-05-15 20:36:54
【问题描述】:
在下面的代码中,最初的 get '/' 包含一个表单,其动作是 post '/'。当用户输入一个数字时,它应该被转换为一个变量,该变量将用于调用 Game 类,为此我生成了另一个动作以在 get '/game' 处显示一个新表单。在 post 方法中生成的变量没有被存储。如何存储在 post 中创建的变量,然后链接到 get '/game' 操作?
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
get '/' do
erb :index
end
post '/' do
n = params['number'].to_i
@letters = Game.new(n)
redirect '/game'
end
get "/game" do
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 do |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
【问题讨论】:
-
请以正确的格式编辑您的问题。
-
谢谢你,你是怎么让它这样工作的?我的意思是把所有的代码都放到窗口框里?
-
您是否有理由没有将表单发布到 /game 并在该代码块中进行处理?
-
实际上是的,因为我只想将帖子中生成的值存储在 '/' do action 中,这样每次我得到 '/game' 时它都不会改变,因为那样会生成另一种形式这将被提交多次。
标签: ruby hyperlink routes sinatra