2010-07-11 80 views
1

这里的PUT动作有些问题,表单得到处理,但更新的字段没有被保存。Sinatra HTTP'PUT'方法

我已经做了Sinatra用户正在做的事情,在Sinatra的“_method”中加入以识别它是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 ID中的特定条目。你在使用ActiveRecord吗?如果是这样,而不是@entry.save,请尝试@entry.update_attributes(params[:entry])

编辑:我猜你没有使用AR,因为我只注意到.get调用。无论您使用何种ORM,都必须具有更新属性并保存记录的简单方法。

+0

arrhh ..谢谢。 @ entry.update_attributes(params [:entry])的作品!我正在使用datamapper。 – crayfish 2010-07-11 03:32:33

+2

如果这解决了你的问题,我将非常感谢你将此标记为未来读者的正确答案......以及我对代表的自私)。 – theIV 2010-07-11 06:44:23

相关问题