在Padrino / Datamapper应用程序中读取布尔值时出现问题

时间:2013-11-30 11:21:29

标签: ruby sinatra boolean datamapper padrino

我正在开发一个使用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属性上,而不是StringInteger属性。

我有什么遗漏的吗?

1 个答案:

答案 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