将信息从SQL DB显示到ERB网页

时间:2015-05-15 17:58:09

标签: ruby database sqlite sinatra sequel

我正在创建一个带有搜索栏的程序,该搜索栏在我的项目中搜索我的SQL DB。

Index.erb:我在index.erb文件中有搜索栏的代码。

<form method="get" action="/submit">
    <input placeholder="Search" type="text" name="userInput"/>
    <input type="submit" value="Search" />
</form>

App.rb:在我的app.rb文件中,我使用params[:userInput]获取用户在搜索栏中输入的信息。然后我通过.where()方法传递它,在我的数据库中搜索具有相同名称的项目。 (注意:我正在使用sinatra创建我的路线)。

get '/' do
    erb :index
end

get '/submit' do
    @item = Item.where(:name => params[:userInput]) #I created a table called `items` under my migration and a class called `Item` in my models folder
    # puts @item.inspect

    erb :index
end

Index.erb:然后回到我的erb文件中,我创建了一个div我要显示的信息(与用户输入的单词同名)最初)是从DB收集的。所以我做了:

<div>
    <%= @item %>
</div>

但这只会在我的网页上显示一个#标签(#)。然后我转到我的app.rb文件并在@item.inspect根目录下/submit。我回来了:

#<Sequel::SQLite::Dataset: "SELECT * FROM 'items' WHERE ('name' = 'apple')">

如何在数据库中显示与“apple”相关联的实际信息到我的网页上?

1 个答案:

答案 0 :(得分:1)

正如我研究的那样,我发现这个问题有很多解决方案。我将采用一种基本而简单的方式。

Index.erb File中,上面写的代码(<div> <%= @item %> </div>)接近于期望的结果。不要只写@item,而是写下:

<div>
    <% @item.each do |x| %> <!-- Or whatever variable you would like to pass -->
        <%= x[:the_id_of_your_hash] %> <!-- You can do this however many times you would like -->
    <% end %>
</div>