Ruby 数据映射器不';不要将数据保存到数据库中

Ruby 数据映射器不';不要将数据保存到数据库中,ruby,sqlite,sinatra,datamapper,Ruby,Sqlite,Sinatra,Datamapper,我正在用Ruby用Sinatra和Datamapper编写一个简单的应用程序,我遇到了一个问题——当我试图将数据保存到SQLite数据库时,没有任何变化。但当我尝试安装数据库或从irb更改数据时,它工作得非常好 以下是我的Datamapper的设置、模型和数据库安装方法(这很好): DataMapper.setup(:默认值,“sqlite3://{File.dirname({uu File}}/db.sqlite”) 类页 包含数据映射器::资源 属性:id,序列号 属性:父\u id,整数

我正在用Ruby用Sinatra和Datamapper编写一个简单的应用程序,我遇到了一个问题——当我试图将数据保存到SQLite数据库时,没有任何变化。但当我尝试安装数据库或从irb更改数据时,它工作得非常好

以下是我的Datamapper的设置、模型和数据库安装方法(这很好):

DataMapper.setup(:默认值,“sqlite3://{File.dirname({uu File}}/db.sqlite”) 类页 包含数据映射器::资源 属性:id,序列号 属性:父\u id,整数 属性:title,String,:length=>0..255 属性:slug,String,:length=>0..255 属性:正文,文本 属性:创建于,日期时间 def儿童 Page.all(:parent\u id=>self.id) 结束 def安装 DataMapper.auto_迁移! Page.new(:parent_id=>0, :title=>“Main”, :slug=>“/”, :body=>“这是主页。将其文本替换为您的”, :创建时间=>Time.now)。保存! 结束 结束 下面是一段无法正常工作的代码:

post %r{/admin/edit/([\d]+)/?} do protected! #works fine and gets a row from database @page = Page.get(params[:captures].first) #update doesn't work, the save! method doesn't work too @page.update :title => params[:title], :parent_id => params[:parent_id], :slug => params[:slug], :body => params[:body] redirect request.path_info end 发布%r{/admin/edit/([\d]+)/?}do 受保护的! #工作正常,并从数据库中获取一行 @page=page.get(参数[:捕获].first) #更新不起作用,保存!这种方法也不管用 @page.update:title=>params[:title], :parent_id=>params[:parent_id], :slug=>params[:slug], :body=>params[:body] 重定向请求路径\u信息 结束 这在irb中运行良好:

p = Page.get(1) p.update :title => "testing update" p=第页获取(1) p、 更新:title=>“测试更新” 有人知道问题出在哪里吗


注意:我目前在Windows 7中工作,ruby版本是1.9.1p243(2009-07-16修订版24175)

尝试测试页面更新的返回值。如果某些数据无效,它将返回false并将Page#errors变量设置为所有错误。(假设您使用的是dm验证)

顺便说一句,编写更新行的更简单方法是:

@page.update(params.only(:title, :parent_id, :slug, :body))

另外,我认为,西纳特拉并不是params钥匙的象征<顺便说一句,code>only是一个相当不错的extlib散列扩展。我已经试过你的建议了。update方法现在返回true,但仍然不保存数据。救命啊!methos也有同样的行为。哦,我忘了在这里写答案。为了使这项工作正常进行,我必须对params[:parent\u id]应用I方法。
@page.update(params.only(:title, :parent_id, :slug, :body))