0

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形式でのみ壊れます。

4

0 に答える 0