如何使用 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"