質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Sinatra

Sinatraは、Rubyで作られた オープンソースのWebアプリケーションフレームワークです。

Q&A

解決済

1回答

538閲覧

グローバル変数を使うことが適正か知りたい

Osmm

総合スコア16

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Sinatra

Sinatraは、Rubyで作られた オープンソースのWebアプリケーションフレームワークです。

0グッド

1クリップ

投稿2019/07/05 01:59

下記のコードは、Sinatra+MailのGemでブラウザからメール送信を行うプログラムです。
(明らかに不要な部分は除いています)

現在の課題は、「フォームから送信した単語をメール本文中に反映させる」ことです。
下記はとりあえず課題を満たすことができた(=メールを送信し、本文に反映フォームからの単語を表示できた)コードです。

が、グローバル変数で無理矢理表示させているような気がしてスマートな値の受け渡しができないものかと考えています。

常識的な方法があればご教授頂ければと思います。

Ruby

1#form.rb 2 3require 'mail' 4require 'sinatra' 5 6post '/receiver' do 7 $email = params[:email] 8 erb :receiver 9end 10 11get '/send' do 12 mail_sending 13 erb :send 14end 15 16 17def mail_sending 18 options = { :address => "smtp.gmail.com", 19 :port => 587, 20 :domain => 'gmail.com', 21 :user_name => 'brabra@mail.com', 22 :password => 'fakepass', 23 :authentication => 'plain', 24 :enable_starttls_auto => true } 25 26 Mail.defaults do 27 delivery_method :smtp, options 28 end 29 30 mail = Mail.new do 31 from 'brabra@mail.com' 32 to 'brabra@mail.com' 33 subject 'sample' 34 body "sample mail said => #{$email}" 35 end 36 mail.deliver! 37end

erb

1 2<!--form.erb--> 3 4<form action="receiver" method="post"> 5 6 <div> 7 email:<input type="text" name="email" value="sample"> 8 </div> 9 10 <div> 11 <input type="submit" value="SEND"> 12 </div> 13 14 15</form> 16 17<!--receiver.erb--> 18 19<html> 20<head> 21 <meta charset="UTF-8"> 22</head> 23<body> 24 ここはReceiverです。今から<%= $email %>のメッセージを送ります。 25 <a href="/send">送信する</a> 26</body> 27</html> 28 29

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Sinatraに詳しいわけではないので検証が必要ですが
複数人が同時にアクセスしたら意図とは違う動作になると思います。

/reciever/sendで分ける必要がよく分かりませんが、

プレビュー的に表示したいのならば

  • hidden formでブラウザに渡して/sendに送ってもらう。

get '/send'だと見栄えが悪いのでgetである必要があるのならば再考が必要
また、ユーザー側で改変が不可能ではない事に注意が必要です。
(最近話題の7payの送信先アドレスみたいに本来改変不可であるべきかは考慮が必要)

  • セッション変数を用いる

ruby

1enable :sessions 2 3post '/receiver' do 4 session[:email] = params[:email] 5 erb :receiver 6end 7 8get '/send' do 9 mail_sending(session[:email]) 10 erb :send 11end 12 13def mail_sending(say) 14# 省略 15 body "sample mail said => #{say}" 16# 略

投稿2019/07/05 02:50

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問