Ruby on rails 如何使用rails控制台从mangomapper获取验证消息?

Ruby on rails 如何使用rails控制台从mangomapper获取验证消息?,ruby-on-rails,validation,mongodb,mongomapper,Ruby On Rails,Validation,Mongodb,Mongomapper,我基本上是在自学如何同时使用RoR和MongoDB。 我正在阅读一本非常好的书/教程: 我决定使用mongomapper gem将Sqlite3替换为MongoDB。 一切正常,但我有一些非阻塞性的小问题,我真的希望我可以摆脱 在第6章中,在进行验证时,我遇到了两个问题: -我不知道如何像Sqlite3那样获取验证消息 “标准”代码是: 但如果我尝试对MongoMapper执行同样的操作,它会抛出一个错误,指出错误是未定义的函数。那么这是否意味着mongomapper/mongo驱动程序中根本没

我基本上是在自学如何同时使用RoR和MongoDB。 我正在阅读一本非常好的书/教程:

我决定使用mongomapper gem将Sqlite3替换为MongoDB。 一切正常,但我有一些非阻塞性的小问题,我真的希望我可以摆脱

在第6章中,在进行验证时,我遇到了两个问题: -我不知道如何像Sqlite3那样获取验证消息

“标准”代码是:

但如果我尝试对MongoMapper执行同样的操作,它会抛出一个错误,指出错误是未定义的函数。那么这是否意味着mongomapper/mongo驱动程序中根本没有实现这一点?还是有其他我想不出来的聪明方法

另外,这里有两件事: -我将按照书中的示例进行操作,因此我希望能够在沙盒模式下使用控制台,但显然这也不起作用:

(...)ruby-1.9.2-p136@rails3/gems/railties-3.0.3/lib/rails/console/sandbox.rb:1:in `<top (required)>': uninitialized constant ActiveRecord (NameError)
from /Users/Alex/.rvm/gems/ruby-1.9.2-p136@rails3/gems/railties-3.0.3/lib/rails/application.rb:226:in `initialize_console'
from /Users/Alex/.rvm/gems/ruby-1.9.2-p136@rails3/gems/railties-3.0.3/lib/rails/application.rb:153:in `load_console'
from /Users/Alex/.rvm/gems/ruby-1.9.2-p136@rails3/gems/railties-3.0.3/lib/rails/commands/console.rb:26:in `start'
from /Users/Alex/.rvm/gems/ruby-1.9.2-p136@rails3/gems/railties-3.0.3/lib/rails/commands/console.rb:8:in `start'
from /Users/Alex/.rvm/gems/ruby-1.9.2-p136@rails3/gems/railties-3.0.3/lib/rails/commands.rb:23:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
任何关于这些话题的建议都会对我有很大帮助

谢谢


Alex

将此行添加到您的模型中:

validates_presence_of :name
.errors
是ActiveRecord特有的,因此如果您尝试使用它,您会收到错误

User
将是一个类,
User
将是一个类的实例-如果没有示例,我在这里无法帮助您

要解决控制台中的问题,您需要在应用程序中的某个位置使用
require'active_record'
,因为您的代码的某些部分仍在使用它,但无法找到它的定义,因为不需要Gem


你在用Bundler吗?将其添加到包中。使用Ruby Gems,只需将需要的东西放在应用程序中合适的位置即可。

多亏了stef提醒我们类和实例化对象之间的区别(Duh!),我意识到我读这种方法太快了:)

从一开始,我就试图从类中获取方法,而不是实例化对象

现在,我可以完全正确地获取user.errors.full_消息

这有助于验证:)希望多亏了这一点,我能够得到我的正则表达式验证排序


Alex

好的,我得到了验证问题(电子邮件也修复了)

此代码将按预期工作:

email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

key :name, String, :length => { :maximum => 50 }
key :email, String  
timestamps!

validates_presence_of :name, :email

validates_uniqueness_of :email, :case_sensitive => false 

validates_format_of :email, :with =>email_regex
我花了很长时间才弄清楚什么是有效的,什么是无效的。。。因为除非我再也不知道如何使用谷歌了,否则这篇文章在任何地方都没有完整的文档记录。您可以在幻灯片、github、google group等网站上找到与mongomapper相关的部分信息

别误会我的意思,我喜欢mongomapper和john在这方面所做的工作,但现在验证过程有点混乱。。。它的一部分仍然使用“旧的”2.x rails系统,另一部分使用新的3.x rails符号

我更喜欢新的3.x符号,因为它允许您将字段周围的所有验证条件集中在一个地方。就像上面的:length=>{:maximum=>50}示例一样。但是为了获得正确的唯一性和格式,我必须在密钥声明之外使用“validates_xxxx”方法。混合使用这两种风格有点烦人

最后,我希望我能找到一份所有可能的验证的官方文件描述,我相信这会有很大帮助


Alex

是的,我正在使用bundler。但从我在不同教程和mongodb.com上读到的内容来看,mongo驱动程序和mapper Rails没有使用activerecord,这就是为什么我没有将它添加到我的Gem中。对于用户vs用户。。好的,我明白了。。。我真蠢,这完全有道理:P
validates_presence_of :name
email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

key :name, String, :length => { :maximum => 50 }
key :email, String  
timestamps!

validates_presence_of :name, :email

validates_uniqueness_of :email, :case_sensitive => false 

validates_format_of :email, :with =>email_regex