我跟随this Sinatra blog post在Ruby Sinatra中建立我自己的博客,唯一的区别是我的模板是苗条而不是ERB。
我遇到的问题是保存已编辑的帖子。这些帖子实际上已保存,但它没有将我重定向到最近编辑过的页面,Chrome正在向我提供"没有收到数据错误",错误代码:ERR_EMPTY_RESPONSE 。
所以我的问题是如何处理收到的无数据?
Sinatra路线
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作为博客数据库[如博客所述]。
答案 0 :(得分:2)
哦,问题出在这里:您在重定向中有#{...}
,但它被单引号包围:'
。 Ruby没有解释单引号内的插值,只能在"
双引号内解释。因此,如果您将该行更改为redirect "/posts/#{@post.id}"
,它应该可以正常工作。