【问题标题】:How to print to web page using Ruby and Sinatra如何使用 Ruby 和 Sinatra 打印到网页
【发布时间】:2018-04-25 00:01:50
【问题描述】:

我在 post 方法中调用了一个 ruby​​ 函数,我试图将函数中的内容输出到网页,但它会在我的控制台中打印输出。如何让它打印到页面上?

我试过了

在 erb 文件中

rsg(params[: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>

【问题讨论】:

  • 你如何在你的网页中调用这个端点(javascript/jquery)?
  • 没有 jquery 或 javascript,只有 ruby​​
  • 我认为执行 会将内容打印到网页,但它只是打印到 ruby​​mine 控制台
  • 我也试过了,还是不行,还是打印到控制台

标签: ruby sinatra


【解决方案1】:

您需要告诉模板如何处理这些参数。

这是正在发生的事情:

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%>

输出生成的字符串。

问题也可能是您试图返回 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

在这里,您只需从您的方法中返回字符串,然后调用 rsg("sandwich") 将返回:

# => "I love my daily sandwich. Good luck to you"

【讨论】:

    猜你喜欢
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多