2014-06-22 35 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