我有一个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个字符,那么部分然后提交该条目中的所有数据(表单中的所有字段)完全消失,永远不会被保存。
和
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
任何人都可以帮忙???
答案 0 :(得分:1)
听起来你还没有将更改应用到底层数据库/表。
如果您不关心吹走现有数据,您可以运行DataMapper.auto_migrate!
(将重新创建所有内容)或更具针对性的Guest.auto_migrate!
(只会重新创建基础{ {1}}表)。
如果您需要保留现有的表数据,则可能需要执行更复杂的更新。您可能希望通过guests
:
psql