#ruby #sinatra #slim-lang #sqlite3-ruby
#ruby #sinatra #slim-lang #sqlite3-ruby
Вопрос:
Я следую этому сообщению в блоге Sinatra, чтобы создать свой собственный блог на Ruby Sinatra, с той лишь разницей, что мои шаблоны находятся в slim, а не в 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 для базы данных блога [как сказано в блоге].
Ответ №1:
О, вот ваша проблема: у вас есть #{...}
перенаправление, но оно заключено в одинарные кавычки : '
. Ruby не интерпретирует интерполяции в одинарных кавычках, только в "
двойных кавычках. Поэтому, если вы измените эту строку redirect "/posts/#{@post.id}"
, она должна работать.
Комментарии:
1. Похоже, это зависит от того, какой сервер используется. Thin с радостью отправляет перенаправление на
/posts/#{@post.id}
(и именно поэтому я собирался прокомментировать, что этот ответ был неправильным), но с помощью Webrick (по умолчанию, если у вас не установлен другой сервер) он действительно вызывает исключение, в результате которого данные не возвращаются.2. Я использовал shotgun в качестве сервера. И спасибо! Это сработало. Я не знал этого о Ruby.