2010-02-19 3 views
0

Sinatra 및 DataMapper를 배우는 중입니다. 그렇게하기 위해, 나는 "고객 데이터베이스"프로젝트를 가지고 놀았습니다.SQLite, DataMapper 및 Sinatra로 레코드 편집

레코드 만들기 및 삭제가 간단하고 이제 레코드 편집 작업을하고 있습니다. 지금까지 나는 기록을 편집 할 것이라고 생각했던 두 가지 경로와 내 견해를 하나로 묶어서 관리했습니다. 여기 내 문제를 설명하기 위해 몇 가지 코드는 다음과 같습니다

내 edit.erb보기 :http://gist.github.com/308405

내 편집/업데이트 경로 :

get '/edit/:acct' do 
    @title = "Edit Client Data" 
    @client = HE_Backend.get(params[:acct]) 
    erb :edit 
end 

post '/update/:acct' do 
    client = HE_Backend.get(params[:acct]) 

    client.attributes = { 
    :name => params['client']['name'], 
    :company => params['client']['company'], 
    :street => params['client']['street'], 
    :state => params['client']['state'], 
    :zip => params['client']['zip'], 
    :phone => params['client']['phone'], 
    :fax => params['client']['fax'], 
    :website => params['client']['website'], 
    :order_date => params['client']['order_date'], 
    :payment_date => params['client']['payment_date'], 
    :monthly => params['client']['monthly'], 
    :setup => params['client']['setup'], 
    :details => params['client']['details'], 
    :notes => params['client']['notes'], 
    :status => params['client']['status'], 
    } 

    if client.save 
    redirect "/show/#{client.acct}" 
    else 
    redirect('/list') 
    end 
end 

그것은 "client.save"부분처럼 보인다 매번 "/ list"로 리디렉션되기 때문에 경로의 false가 반환됩니다. #save 대신 #update 메소드를 사용하면 DM이 "더티 레코드"에 대해 불평합니다.

누구나 내가 뭘 잘못하고 있는지에 대한 아이디어가 있거나 DataMapper 및 Sinatra를 사용하여 SQLite에서 레코드를 편집하기위한 예제를 가르쳐 주시겠습니까?

감사합니다.

답변

0

이것은 검증 문제로 밝혀졌습니다. 유효성 검사를하지 않고 해당 필드에 내 모델의 데이터 유형 이외의 데이터 유형을 넣으면 #save 메소드가 false를 반환합니다.

관련 문제