2017-11-12 8 views
0

私はpostメソッドでruby関数を呼び出していますが、関数からWebページに内容を出力しようとしていますが、代わりに出力をコンソールに出力します。ページに印刷するにはどうしたらいいですか?私はRubyとSinatraを使ってWebページに印刷するには

を試みた

<% = RSG(paramsは[:grammar_file])%> ERBファイル

RSG内部(paramsは[:grammar_file])

ポストメソッドの内側にあり、両方ともコンソールに印刷するだけです。

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> 
+0

あなたのウェブページ(javascript/jquery)でどのようにこのエンドポイントを呼び出していますか? – sbr

+0

jqueryまたはjavascriptなし、ルビー – msc

+0

<%=%>はウェブページにコンテンツを印刷すると思っていたが、それだけではルビミンコンソールにプリントされている。 – msc

答えて

0

あなたはあなたのテンプレートにparamsで何をするべきかを伝える必要があります。出力するには

<%=rsg%> 

:あなたのようなラインを持つインデックス・テンプレート:このように

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 

次に、あなたに

これは何が起こっているかであります生成されたString。

def rsg(p) 
    puts "I love my daily #{p}. Good luck to you" 
end 

これはちょうど(正確にはtrue)コンソールと他には何に印刷されます

問題はまた、あなたが代わりにプレーンな文字列のputs文を返すためにtryngしていることかもしれません

ベター:

ここ
def rsg(p) 
    "I love my daily #{p}. Good luck to you" 
end 

あなたは自分のメソッドから文字列を返すとrsg("sandwich")ウィルを呼び出します返信:

# => "I love my daily sandwich. Good luck to you" 
関連する問題