3

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

アプリケーションは非常にシンプルで、単語リストのテキストファイルに対して検証し、すべてのアナグラムを検索します。これは非常に単純なはずだと思っていましたが、そのテキストファイルをRails(またはその方法を選択した場合はSinatra)にインポートすることに固執しています。Railsプロジェクトでは、テキストファイルをlibディレクトリに配置しました。

残念ながら、Railsではパスが正しいように見えても、エラーが発生します。

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

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

これがコードです。それ自体でうまく機能します:

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
4

3 に答える 3

5

実際の機能 (アナグラムの検索) をメソッドに分解します。Web アプリからそのメソッドを呼び出します。

Rails では、ActiveRecord の代わりにそのメソッドを呼び出すコントローラー アクションを作成します。Sinatra では、メソッドを呼び出すルートを作成するだけです。以下はシナトラの例です。

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

次に、http://yourapp.com/word/poolにアクセスすると、「loop, polo」と出力されます。

于 2009-04-01T19:06:02.823 に答える
3

シナトラを使えば、何でもできます。これらの例では、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
}

その他。

于 2009-04-01T19:54:59.947 に答える