无法使用带有sinatra的datamapper保存表单数据

时间:2013-03-25 10:37:29

标签: mysql ruby database sinatra datamapper

我目前正在与Sinatra构建一个小应用程序,并遇到了将表单数据保存到mysql数据库的问题。首先,我可以确认与数据库的连接是否正常,因为我使用twitter auth登录应用程序并将数据保存到表中。

表单很简单

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!

和sinatra路线是这样的:

 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闪存。我确定这是一个显而易见的事情,但我似乎无法看到我在哪里出错。

2 个答案:

答案 0 :(得分: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

但理想情况下,您应该设置记录器并记录您要做的事情。这使得调试变得更加容易。

答案 1 :(得分:0)

由于mcfinnigans评论,我使用将错误记录到控制台的帮助解决了这个问题。

数据库期待一个数字,但由于表单使用的是文本框,它试图保存为字符串。所以我将.to_f添加到我的金额参数中进行转换。