2010-07-11 4 views
1

여기에 PUT 작업에 문제가있어 양식이 처리되지만 업데이트 된 필드가 저장되지 않습니다.Sinatra HTTP 'PUT'방법

나는 Sinatra 사용자가 "HTTP _ PUT"작업임을 인식하도록 "_ 메서드"를 추가하여 Sinatra 사용자가하고있는 일을 해왔습니다. 누구든지 여기에 실수를 발견 할 수 있었습니까?

# 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

방금 ​​PARAMS의 ID로 특정 항목을 가져 오는하고는 @entry 모든 갱신을하고있을 것 같지 않습니다. ActiveRecord를 사용하고 있습니까? 그렇다면 @entry.save 대신 @entry.update_attributes(params[:entry])을 시도하십시오.

편집 : 방금 .get 전화를 알았으므로 AR을 사용하지 않는 것으로 추측됩니다. 어떤 ORM을 사용하든 속성을 업데이트 한 다음 레코드를 저장하는 쉬운 방법이 있어야합니다.

+0

arrhh..thanks. @ entry.update_attributes (params [: entry]) 작동합니다! 나는 datamapper를 사용하고있다. – crayfish

+2

그것이 당신의 문제를 해결했다면, 나는 이것을 미래의 독자들에게 ... 그리고 rep의 나의 이기심 때문에 올바른 대답으로 표시해 주셔서 감사합니다. – theIV