我正在开发一个使用Datamapper作为ORM的Padrino项目。我有一个类似于这样的User类:
class User
include DataMapper::Resource
property :id, Serial
property :username, String,
property :password, String
property :confirmed, Boolean
...<snip>...
end
现在,在我的users
控制器中,我有这段代码:
user = User.get(current_user)
var1 = user.username
var2 = user.confirmed
现在,var1
与模型的username
属性的内容完全匹配。但是,下一行会引发以下错误:
NoMethodError at /users/blah
undefined method 'confirmed' for User:Class
看起来ruby正在尝试将.confirmed
视为一种方法,而不是属性?它似乎发生在Boolean
属性上,而不是String
或Integer
属性。
我有什么遗漏的吗?
答案 0 :(得分:1)
DataMapper属性只是DM为您提供的Ruby方法(它们是在调用property
方法时使用Ruby的元编程功能制作的)。你可以试试
p user.methods.sort - Object.methods
获取您创建的User
对象的属性列表。
DM将选择为user.confirmed?
属性创建方法:confirmed
- 它遵循松散的Ruby约定,即在末尾用?
命名布尔方法。我通过在这里探索DataMapper代码来检查这一点:https://github.com/datamapper/dm-core/blob/master/lib/dm-core/property.rb