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のルーティング機能を利用する。
続く。