Railsで URL Shortenerを作ってみた (2/3)

URL Shortnerに必要な機能、 URLに対応する短い文字列を定義・登録する部分を作る。

考えるべきことは

  • 登録済みのURLに対しては、それに対応する短縮名を返す
  • 登録されていないURLに対しては短縮名を生成して、URLとのペアをデータベースに登録する

といったところ。

短縮名は英数字6文字のランダムな文字列とする。
http://d.hatena.ne.jp/haida/20071211/1197359946 に大変便利なサンプルがあったので、 urlpairs_controller.rbに以下のようなメソッドを追加する。

  private
  def getRandomStr
    a = ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a
    ary = Array.new(6) do
      a[rand(a.size)]
    end
    ary.join
  end

次に createアクション。短いのでコードをそのまま載せる。初めの2行はURLが登録されているか否かの判定。それ以後は新規登録の処理。

 def create
    @urlpair = Urlpair.find_by_url(params[:urlpair][:url])
    return if @urlpair

    @urlpair = Urlpair.new
    @urlpair.url = params[:urlpair][:url]

    begin
      @urlpair.surl = getRandomStr()
      upair = Urlpair.find_by_surl(@urlpair.surl)
    end until upair == nil

    @urlpair.save
  end

で、これで確定した @urlpairを SURL/app/views/urlpairs/create.rjsで利用する。

shortURL = @urlpair.surl

page[:shorturl].replace_html("<a href=\"#{shortURL}\">#{shortURL}</a>")
page[:shorturl].highlight
page[:shorturl].select();

これで以下のような感じで動くようになる。見たとおりランダムな文字列が表示されるが、登録済みのURLに対してはそれに対応する文字列が表示される。


これで登録は出来るようになったが、それを活用する方法が用意されていない。それに文字列が表示されるだけでURLの短縮形になっていない。これらを解決するためにコントローラに新たなメソッドを追加し、Railsのルーティング機能を利用する。

続く。

Railsで URL Shortenerを作ってみた(3/3) - Nunockyの日記