2010-07-11 2 views
1

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

Я делал то, что делают пользователи 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> 

ответ

3

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

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

+0

arrhh..thanks. @ entry.update_attributes (params [: entry]) работает! Я использую datamapper. – crayfish

+2

Если бы это решило вашу проблему, я был бы признателен, что вы отметили это как правильный ответ для будущих читателей ... и для моего эгоизма репутации;). – theIV