Sinatra HTTP'PUT'方法

时间:2010-07-11 02:29:37

标签: ruby http sinatra

此处的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>

1 个答案:

答案 0 :(得分:3)

您似乎没有对@entry进行任何更新,您只是从params获取id为id的特定条目。你在使用ActiveRecord吗?如果是,请尝试@entry.save

,而不是@entry.update_attributes(params[:entry])

编辑:我猜你没有使用AR,因为我刚注意到.get电话。无论您使用哪种ORM,都必须有一种简单的方法来更新属性,然后保存记录。