Ruby / Sinatra中的简单Web应用程序开发 - 已提交的“已提交信息”未被提取

时间:2016-10-17 04:46:54

标签: ruby web-applications sinatra mechanize

我的目标是创建一个简单的网络应用,访问者可以在其中输入自己喜欢的艺术家,以查看拍卖中当前可用的内容以及估计的价格。我们以艺术家Robert Genn为例

当我在ruby中运行代码时,我会在http://localhost:4567/页面上看到我所看到的内容;它是我最终想要创建的简单外壳。但是,一旦我输入我感兴趣的艺术家,即Robert Genn,我就会得到一个错误页面。

以下是我的两个代码文件.rb first和.erb

require 'sinatra'
require 'mechanize'

get '/' do
    @greeting = "WELCOME! WHAT ARTIST WOULD YOU LIKE TO LOOK UP TODAY?"
    erb :index
end

agent = Mechanize.new

page = agent.get('http://www.invaluable.com/')

search_form = page.form
search_terms = gets.chomp.delete(",")

search_form['withAll'] = search_terms

page = search_form.submit

items = page.css('.lot')
item = page.css('.estimate normal')

items.each do |item|
    return "#{item.css('span').text} #{items.css('span').text}"

end

这是我的.erb文件

<html>
    <head>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.3/css/bootstrap.min.css">
    </head>
    <body>
        <div class="container">

            <h1><%= @greeting %></h1>
            <p>What artist are you seeking today?</p>
            <form action="/" method="POST" class="form-inline">
                <div class="form-group">
                <input type="text" name="ticker" class="form-control">
                </div>
                <input type="submit" class="btn btn-primary">
            </form>
        </div>
    </body>
</html> 

1 个答案:

答案 0 :(得分:2)

您的样本有很多问题。

您需要将所有代码放在get '/' do块中或更好地放在帮助文件/模块中。

使用像机械化这样的东西来查询外部源是一个错误的决定。虽然可以查询外部源,但可以使用Net::HTTP GET或类似的方式进行查询。 Mechanize将在服务器上启动浏览器,这注定要失败。

在服务器上或使用表单的结果也没有使用gets。

我建议你先在Sinatra上做一些阅读,很多很好的例子(例如在http://www.sinatrarb.com /)以及一些可供选择的书籍。 例如: https://www.geekbooks.me/book/view/jump-start-sinatra http://dl.finebook.ir/book/26/14702.pdf

还尝试将您的代码分成可以自行测试的部分,例如,可以在您可以先在其他代码中实现它之前先测试的方法中提取外部源的查询。

在这种情况下,我认为由于上述原因会有很多错误,但将来会给我们一个错误的堆栈跟踪,以便我们更好地帮助您。

不能给你代码,因为我必须重写一切不是我们的目的。不要放弃并继续学习和成功!