2013-03-25 5 views
2

현재 Sinatra를 사용하여 작은 응용 프로그램을 만들고 있으며 mysql 데이터베이스에 양식 데이터를 저장하는 문제에 맞서 있습니다. 먼저 트위터 인증을 사용하여 앱에 로그인하면서 데이터베이스에 대한 연결이 작동하는지 확인하고 dat을 해당 테이블에 저장하고 있습니다. 그래서sinatra와 함께 datamapper를 사용하여 폼 데이터 저장하기

class Weight 
    include DataMapper::Resource 
    property :id,   Serial, key: true 
    property :amount,  Float 
    property :is_goal, Boolean, :default => false 
    property :created_at, DateTime, :required => true 
    belongs_to :user 
end 

DataMapper.finalize 
DataMapper.auto_upgrade! 

와시나 경로는 다음과 같이처럼

양식은

route: '/' 
<form action="/create" method="post"> 
    <p> 
     <label for="">Weight</label> 
     <input type="text" name="weight[amount]"> 
    </p> 
    <p> 
     <input type="submit" id=""> 
    </p> 
</form> 

모델은 보이는 간단하다 : 어떤 이유로 내가 입력 할 때마다 지금

post '/create' do 
    @weight = Weight.create(params[:weight]) 
if @weight.save 
    flash[:success] = "Its all saved now" 
    redirect '/' 
else 
    flash[:failure] = "I Didnt save!" 
    redirect '/' 
end 
end 

양식은 I didnt save 플래시로 돌아옵니다. Im는 이것이 명백한 물건이다라고 확신한다. 그러나 나는 기울지 않는다.

+0

저장이 실패 할 때 dataMapper가 반환하는 오류를 기록하지 않는 이유는 무엇입니까? 특히, log @ weight.errors - 실패한 모든 유효성 검사를 나열해야합니다. – mcfinnigan

+0

어떻게 그걸 할 수 있을지 모르겠다.보기에서 출력 할 필요가 없습니까? –

+0

고마워, 너의 질문은 내 양식 태그에 method = "post"가 누락되었음을 깨닫게했다. – ConorLuddy

답변

0

mcfinnigans 코멘트 덕분에 콘솔에 내 오류를 기록하는 데 도움이되었습니다.

데이터베이스에 숫자가 필요하지만 양식에 텍스트 상자를 사용하여 문자열로 저장하려고했습니다. 그래서 나는 그것을 변환하기 위해 나의 금액 param에 .to_f을 추가했다.

2
post '/create' do 
    @weight = Weight.create(params[:weight]) 

    if @weight.save 
    flash[:success] = "Its all saved now" 
    redirect '/' 
    else 
    flash[:failure] = "I Didnt save!" 
    STDERR.puts @weight.errors.inspect # <-- will dump the errors structure to STDERR 
    redirect '/' 
    end 
end 

이상적으로는 로거를 설정하고 현재 상태를 기록해야합니다. 이로 인해 작업을 훨씬 쉽게 디버그 할 수 있습니다.

+0

로거 설정에 대해 어떻게 생각 하나, 어떤 링크를 알고 있니? –

+0

http://stackoverflow.com/questions/5995854/logging-in-sinatra는 몇 가지 힌트를 제공합니다. – mcfinnigan

관련 문제