使用Sinatra,Datamapper和Postgres丢失了数据和错误

时间:2016-01-17 15:31:33

标签: ruby postgresql sinatra datamapper

我有一个Sinatra应用程序,它运行一个简单的网站,用户可以确认参加某个活动,并在出席时留下请求。

我正在使用datamapper保存到Postgres。该模型如下所示:

require 'data_mapper'
require 'dm-postgres-adapter'

class Guest
    include DataMapper::Resource

    property :id,     Serial
    property :name,  String
    property :attending,    String
    property :others, String
    property :requests, String

我遇到的问题是,如果用户在“请求”中使用了超过50个字符,那么部分然后提交该条目中的所有数据(表单中的所有字段)完全消失,永远不会被保存。

我看了https://moodle2013-14.ua.es/moodle/pluginfile.php/73782/mod_resource/content/2/datamapper.org%20docs/docs/properties.html

http://datamapper.org/docs/pitfalls.html

这让我得出结论,当使用String类型时,datamapper默认为50个字符。所以我尝试了他们提供的解决方案,即修改请求:

property :requests, String, :length => 255

但是这样做我只得到以下sinatra错误....

DataObjects :: DataError at / invitees

错误:类型字符变化的值太长(50)

app.rb看起来像这样:

post '/invitees' do
 Guest.create(name: params[:name], attending: params[:attending],  others: params[:others], requests: params[:requests])
 end

任何人都可以帮忙???

1 个答案:

答案 0 :(得分:1)

听起来你还没有将更改应用到底层数据库/表。

如果您不关心吹走现有数据,您可以运行DataMapper.auto_migrate!(将重新创建所有内容)或更具针对性的Guest.auto_migrate!(只会重新创建基础{ {1}}表)。

如果您需要保留现有的表数据,则可能需要执行更复杂的更新。您可能希望通过guests

这样做
psql