如何使用 Ruby 和 Sinatra 打印到网页
How to print to web page using Ruby and Sinatra
我在 post 方法中调用 ruby 函数,我试图将函数的内容输出到网页,但它却在我的控制台中打印输出。如何让它打印到页面上?
我试过了
<%=rsg(params[:grammar_file])%> 在 erb 文件中
和
rsg(参数[:grammar_file])
在 post 方法内部,两者都只打印到控制台
require 'sinatra'
require 'sinatra/reloader' if development? #gem install sinatra-contrib
require './rsg.rb'
enable :sessions
get '/' do
erb :index
end
post '/' do
rsg(params[:grammar_file])
erb :index
end
<% title = "RANDOM SENTENCE GENERATOR" %>
<!doctype html>
<html lang="en">
<head>
<title><%= @title || "RSG" %></title>
<meta charset="UTF8">
</head>
<body>
<h1>RubyRSG Demo</h1>
<p>Select grammar file to create randomly generated sentence</p>
<form action="/" method="post">
<select name="grammar_file">
<option value="Select" hidden>Select</option>
<option value="Poem">Poem</option>
<option value="Insult">Insult</option>
<option value="Extension-request">Extension-request</option>
<option value="Bond-movie">Bond-movie</option>
</select>
<br><br>
<input type="submit" value="submit">
</form>
<section>
<p>Here</p>
<p><%= rsg(params[:grammar_file])%></p>
</section>
</body>
</html>
您需要告诉模板如何处理参数。
这是正在发生的事情:
post '/' do
rsg(params[:grammar_file])
# your rsg method produces some output. I guess you have a line the `puts` your params to stdout somewhere. Instead you should redirect the output into the template.
erb :index
end
像这样:
post '/' do
erb :index, :locals => {:rsg => rsg(params[:grammar_file])}
end
然后,在您的 :index 模板中,您有这样一行:
<%=rsg%>
输出生成的String。
问题也可能是您正在尝试 return puts
语句而不是纯字符串:
def rsg(p)
puts "I love my daily #{p}. Good luck to you"
end
这只会打印到控制台,没有其他内容(true
准确)
更好:
def rsg(p)
"I love my daily #{p}. Good luck to you"
end
在这里,您将只 return 来自方法的字符串,调用 rsg("sandwich")
将 return:
# => "I love my daily sandwich. Good luck to you"
我在 post 方法中调用 ruby 函数,我试图将函数的内容输出到网页,但它却在我的控制台中打印输出。如何让它打印到页面上?
我试过了
<%=rsg(params[:grammar_file])%> 在 erb 文件中
和
rsg(参数[:grammar_file])
在 post 方法内部,两者都只打印到控制台
require 'sinatra'
require 'sinatra/reloader' if development? #gem install sinatra-contrib
require './rsg.rb'
enable :sessions
get '/' do
erb :index
end
post '/' do
rsg(params[:grammar_file])
erb :index
end
<% title = "RANDOM SENTENCE GENERATOR" %>
<!doctype html>
<html lang="en">
<head>
<title><%= @title || "RSG" %></title>
<meta charset="UTF8">
</head>
<body>
<h1>RubyRSG Demo</h1>
<p>Select grammar file to create randomly generated sentence</p>
<form action="/" method="post">
<select name="grammar_file">
<option value="Select" hidden>Select</option>
<option value="Poem">Poem</option>
<option value="Insult">Insult</option>
<option value="Extension-request">Extension-request</option>
<option value="Bond-movie">Bond-movie</option>
</select>
<br><br>
<input type="submit" value="submit">
</form>
<section>
<p>Here</p>
<p><%= rsg(params[:grammar_file])%></p>
</section>
</body>
</html>
您需要告诉模板如何处理参数。
这是正在发生的事情:
post '/' do
rsg(params[:grammar_file])
# your rsg method produces some output. I guess you have a line the `puts` your params to stdout somewhere. Instead you should redirect the output into the template.
erb :index
end
像这样:
post '/' do
erb :index, :locals => {:rsg => rsg(params[:grammar_file])}
end
然后,在您的 :index 模板中,您有这样一行:
<%=rsg%>
输出生成的String。
问题也可能是您正在尝试 return puts
语句而不是纯字符串:
def rsg(p)
puts "I love my daily #{p}. Good luck to you"
end
这只会打印到控制台,没有其他内容(true
准确)
更好:
def rsg(p)
"I love my daily #{p}. Good luck to you"
end
在这里,您将只 return 来自方法的字符串,调用 rsg("sandwich")
将 return:
# => "I love my daily sandwich. Good luck to you"