SinatraでURL短縮アプリケーションを作成しています。次のように機能します。
フロントページは、長いURLを入力するための1つのフィールドを持つフォームです。
<form action="" method="post">
<input type='url' name='url' placeholder='Enter URL to be shortened'>
<input type="submit">
</form>
フォームは同じフロントページに投稿され、「/」に投稿するためのコードは次のとおりです。
post '/' do
#Makes variable of POSTed url.
@long = params[:url]
loop do
#makes random six letter hash
@rand = (0...6).map{(65+rand(26)).chr}.join.downcase
#don't generate another one if it isn't found in the database
break if Short.first(id: "#{@rand}").nil?
end
#saves url and hash to database
@input = Short.create(url: @long, id: @rand)
#displays link with hash to be copied into browser address bar
"http://192.168.1.3:999/"+@rand
end
問題は、フォームを送信しても、行http://192.168.1.3:999/...
の後に置いたものなどが返されないことです。@input=Short.create(...
trueの場合でも、エラーは返されませんraise_on_save_failure
。その行をコメントアウトすると、正常に機能します(短縮URLを使用しようとする場合を除く)。
編集:URL以外を許可するようにコードを変更すると、完全に正常に機能します。正確なURL形式でのみ壊れます。