2

私は現在Sinatraで小さなアプリを構築しており、フォームデータをmysqlデータベースに保存する際に問題が発生しました。まず、twitter authを使用してアプリにログインし、datをテーブルに保存しているため、データベースへの接続が機能していることを確認できます。

フォームはシンプルです

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>

モデルはそのように見えます

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!

シナトラルートは次のようになります。

 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がどこで間違っているのかわかりません。

4

2 に答える 2

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

ただし、理想的には、ロガーを設定して、現在の状況をログに記録する必要があります。これにより、デバッグがはるかに簡単になります。

于 2013-03-25T11:03:22.910 に答える
0

mcfinnigansのコメントのおかげで、エラーをコンソールに記録することでこれを解決しました。

データベースは数値を期待していましたが、フォームがテキストボックスを使用していたため、文字列として保存しようとしました。.to_fだから私はそれを変換するために私の金額パラメータに追加しました。

于 2013-03-25T11:38:40.367 に答える