Синатра HTTP метод "PUT" - PullRequest
1 голос
/ 11 июля 2010

Что-то не так с действием PUT, форма обрабатывается, но обновленное поле не сохраняется.

Я сделал то, что делают пользователи Sinatra, добавив "_method", чтобы Sinatra распознала, что это действие HTTP PUT. Может ли кто-нибудь заметить здесь ошибку?

# edit
get '/entries/*/:id/edit' do
  @entry = Entries.get(params[:id])
  @title = "edit"
  erb :edit, :layout => :edit_layout
end

# update
put '/entries/:id' do
  @entry = Entries.get(params[:id])
  if @entry.save
    redirect "/entries/id=#{@entry.id}"
  else
    redirect "/enewsletters"
  end
end

<!-- Edit form -->
<form action="/enewsletters/edit/<%= @entry.id %>" method="post">
  <input name="_method" value="put" type="hidden"/>
  <p>
    <label>Content</label><br/>
    <input type="text" name="entry[title]" value="<%= @enew.title %>">
  </p>
  <p>
    <input type="submit" name="commit" value="update">
  </p>
</form>

1 Ответ

3 голосов
/ 11 июля 2010

Вы, похоже, не обновляете @entry, вы просто извлекаете конкретную запись с идентификатором из params. Вы используете ActiveRecord? Если это так, вместо @entry.save, попробуйте @entry.update_attributes(params[:entry]).

Редактировать: Я предполагаю, что вы не используете AR, так как я только что заметил вызов .get. Какой бы ORM вы не использовали, у вас должен быть простой способ обновить атрибуты и затем сохранить запись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...