2013-11-21 40 views
2

我使用續集。 在我app.rb,我寫我的博客與紅寶石和sinatra的簡單搜索表單

get '/search' do 
    @post = Post.find(:Title => "%#{params[:query]}%") 
    erb :'layout' 
end 

Layout.erb

<form action="/search" method="get"> 
    <input type="text" name="query"/><br /> 
    <input type="submit" /> 
</form> 

<% if @results %> 
<table> 
    <%@results.each do |r|%> 
    <tr valign="top"> 
    <td><%=r.title%></td> 
    </tr> 
    <%end%> 
</table> 
<% end %> 

而到了blog_model.rb在Post類這樣的:

def self.search(query) 
    #where(:title, query) -> This would return an exact match of the query 
    where("title like ?", "%#{query}%") 
end 

而且我得到這個:LocalJumpError在/ search 沒有給出塊(yield)。 那麼該做什麼或者我做了這個代碼是否正確?提前致謝。

+0

你能不能從日誌後整個錯誤訊息嗎?你也向我們展示了search()方法,你甚至都沒有在任何地方使用,你也使用'find()'你應該在你的第一個片段中使用'where()'。 –

回答

2

我想問題是erb文件的名稱,layout.erb

Sinatra總是搜索layout.erb,如果您沒有明確指出其他佈局文件,則會處理頁面模板。該文件的格式爲:

<!doctype html> 
<html> 
<head> 
... 
<body> 
... 
    <%= yield %> insert the content here 
... 
</html> 

解決辦法有兩個:

  1. 重命名layout.erb文件。
  2. 更換僱員再培訓局電話:erb :layout, layout: false