我写了一个小的ruby应用程序,这是一个anagram搜索器.这是学习红宝石,但我想把它放在网上供个人使用.我对Rails有一些经验,很多人都推荐过Sinatra.我也没关系,但我找不到有关如何使用文本文件而不是数据库的任何信息.
应用程序非常简单,对单词列表的文本文件进行验证,然后查找所有字谜.我一直认为这应该很简单,但是我坚持将该文本文件导入Rails(如果我选择那样的话,那就是Sinatra).在Rails项目中,我将文本文件放在lib
目录中.
不幸的是,即使Rails中的路径看起来是正确的,我也会收到错误:
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
Chuck.. 5
将实际功能(找到字谜)纳入方法.从您的Web应用程序调用该方法.
在Rails中,您将创建一个调用该方法而不是ActiveRecord的控制器操作.在Sinatra中,您只需创建一个调用该方法的路径.这是一个Sinatra的例子:
get '/word/:input' anagrams = find_anagrams(params[:input]) anagrams.join(", ") end
然后,当您访问http://yourapp.com/word/pool时,它将打印"loop,polo".
将实际功能(找到字谜)纳入方法.从您的Web应用程序调用该方法.
在Rails中,您将创建一个调用该方法而不是ActiveRecord的控制器操作.在Sinatra中,您只需创建一个调用该方法的路径.这是一个Sinatra的例子:
get '/word/:input' anagrams = find_anagrams(params[:input]) anagrams.join(", ") end
然后,当您访问http://yourapp.com/word/pool时,它将打印"loop,polo".
我知道问题被标记为已回答,但我更喜欢以下内容,因为它使用查询参数而不是基于路径的参数,这意味着您可以使用常规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
以下haml(您可以使用您喜欢的任何模板语言).这将为您提供一个输入表单,如果已提供单词并生成了anagram列表,则会显示字谜列表:
%h1 Enter a word %form{:action => "anagram"} %input{:type => "text", :name => "word"} %input{:type => "submit"} - if @word %h1 Anagrams of &= @word - if @anagrams %ul - @anagrams.each do |word| %li&= word - else %p No anagrams found