2014-06-22 36 views
1

我正在關注this Sinatra blog post在Ruby Sinatra中構建自己的博客,唯一的區別是我的模板很薄,而不是ERB。編輯博客文章時沒有收到Sinatra的數據

我遇到的問題是保存編輯的帖子。帖子實際上保存了,但並沒有將我重定向到最近編輯的頁面,並且Chrome給我一個「沒有數據收到錯誤」,錯誤代碼:ERR_EMPTY_RESPONSE

所以我的問題是如何處理無數據收到?

西納特拉路線

get '/posts/:id/edit' do 
    @post = Post.find(params[:id]) 
    @title = 'Edit Post' 

    slim :'posts/edit' 
end 

put '/posts/:id' do 
    @post = Post.find(params[:id]) 
    if @post.update_attributes(params[:post]) 
    redirect '/posts/#{@post.id}' 
    else 
    slim :'posts/edit' 
    end 
end 

修身模板

h1 Edit Post 
    form action="/posts/#{@post.id}" method="post" 
    input type="hidden" name="_method" value="put" 

    label for="post_title" Title: 
    input id="post_title" name="post[title]" type="text" value="#{@post.title}" 

    label for="post_body" Body: 
    textarea id="post_body" name="post[body]" rows="5" #{@post.body} 

    input type="submit" value="Save" 

我使用的sqlite3的博客數據庫[如在博客中說。

回答

2

噢,這是你的問題:你在重定向中有#{...},但它被單引號標記:'。 Ruby不解釋單引號內的插值,僅在"雙引號內。所以,如果你將該行更改爲redirect "/posts/#{@post.id}",它應該可以工作。

+1

看來這取決於正在使用哪個服務器。瘦高興地發送一個重定向到'/ posts /#{@ post.id}'(這就是爲什麼我要發表評論說這個答案是錯誤的),但是使用Webrick(如果沒有安裝其他服務器,默認情況下)確實引發了一個異常,導致沒有數據被返回。 – matt

+0

我使用霰彈槍作爲服務器。謝謝你!這工作。我不知道Ruby。 – liloka

+0

有趣,@matt - 我不知道。這太酷了。 – acsmith