2009-04-01 3 views
3

私が書いた小さなルビーアプリケーションは、アナグラムサーチャーです。それはルビーを学ぶためのものですが、私は個人的な使用のためにオンラインにしたいと思います。私はRailsに関するいくつかの経験があり、多くの人がSinatraを推薦しています。私もどちらでも問題はありませんが、データベースの代わりにテキストファイルを使用する方法に関する情報は見つかりません。小さなルビーアプリをオンラインにするにはどうすればいいですか?

アプリケーションは非常に簡単で、単語リストのテキストファイルに対して検証し、すべてのアナグラムを見つけます。私はこれが非常にシンプルであるべきだと仮定していましたが、私はそのテキストファイルをRails(あるいはその方法を選んだ場合はSinatra)にインポートすることに専念しています。 Railsプロジェクトでは、テキストファイルをlibディレクトリに配置しました。

no such file to load -- /Users/court/Sites/cvtest/lib/english.txt 

cvtestがレールのプロジェクトの名前です)

ここではコードです:

は残念ながら、パスがRailsの中に正しいように見えるにもかかわらず、私はエラーを取得します。それ自身で素晴らしい作品です:

file_path = '/Users/court/Sites/anagram/dictionary/english.txt' 

input_string = gets.chomp 


# validate input to list 
if File.foreach(file_path) {|x| break x if x.chomp == input_string} 

    #break down the word 
    word = input_string.split(//).sort 

    # match word 
    anagrams = IO.readlines(file_path).partition{ 
    |line| line.strip! 
    (line.size == word.size && line.split(//).sort == word) 
    }[0] 

    #list all words except the original 
    anagrams.each{ |matched_word| puts matched_word unless matched_word == input_string } 


#display error if 
else 
    puts "This word cannot be found in the dictionary" 
end 

答えて

5

実際の機能(アナグラムを見つける)をメソッドにファクタ化します。あなたのWebアプリケーションからそのメソッドを呼び出します。

Railsでは、ActiveRecordではなくそのメソッドを呼び出すコントローラアクションを作成します。 Sinatraでは、メソッドを呼び出すルートを作成するだけです。ここではシナトラの例です:

get '/word/:input' 
    anagrams = find_anagrams(params[:input]) 
    anagrams.join(", ") 
end 

あなたがhttp://yourapp.com/word/poolにアクセスするときに、それは「ループ、ポロ」を印刷します。

3

sinatraを使用すると、何でもできます。これらの例でもsinatraは必要ありません。

require 'rubygems' 
require 'sinatra' 
require 'yaml' 

documents = YAML::load_file("your_data.yml") 

または:

require 'rubygems' 
require 'sinatra' 
content = Dir[File.join(__DIR__, "content/*.textile)].map {|path| 
    content = RedCloth(File.read(path)).to_html 
} 

エトセトラ。

5

私は答えとして質問がマークされている知っているが、それはクエリパラメータではなく、あなたが通常のGETのフォーム送信を使用してパラメータを渡すことができることを意味し、パスベースのパラメータ、使用していますように私は、次のことを好む:

require 'rubygems' 
require 'sinatra' 

def find_anagrams word 
    # your anagram method here 
end 

get '/anagram' do 
    @word = params['word'] 
    @anagrams = find_anagrams @word if @word 
    haml :anagram 
end 

そして、あなたは好きなテンプレート言語を使うことができます。これにより、入力フォームが表示され、単語が入力されてアナグラムリストが生成された場合、アナグラムのリストが表示されます。

関連する問題