我正在试图弄清楚为什么在为用户分配角色时,roles_users表的created_at列似乎占用了用户。它应该没有自己的创建日期?有帮助吗?
ruby-1.8.7-p174> Time.now
=> 2月24日星期四15:50:11 +0100 2011
ruby-1.8.7-p174> User.last.has_role! “安装程序”
用户负载(0.5ms)SELECT * FROM“users”ORDER BY users.id DESC LIMIT 1
国家负荷(0.2ms)SELECT * FROM“国家”WHERE(“国家”。“id”= 106)
角色加载(0.2ms)SELECT * FROM“roles”WHERE(name ='installer'和authorizable_type IS NULL和authorizable_id IS NULL)LIMIT 1
角色加载(0.1ms)SELECT“roles”.id FROM“roles”INNER JOIN“roles_users”ON“roles”.id =“roles_users”.role_id WHERE(“roles”。“id”= 2)AND(“roles_users” .user_id = 31)限制1
SQL(0.3ms)INSERT INTO“roles_users”(“created_at”,“updated_at”,“role_id”,“user_id”)VALUES(' 2010-09-16 14:11:24 ',' 2010-09-16 14:11:24 ',2,31)
角色加载(0.5ms)SELECT * FROM“roles”INNER JOIN“roles_users”ON“roles”.id =“roles_users”.role_id WHERE(“roles_users”.user_id = 31)
=> [#Role id:2,name:“installer”,authorizable_type:nil,authorizable_id:nil,created_at:“2010-09-16 14:11:24”,updated_at:“2010-09-16 14:11:24” >]
的 ruby-1.8.7-p174> Role.find_by_name( “安装程序”)
角色加载(0.3ms)SELECT * FROM“roles”WHERE(“roles”。“name”='installer')LIMIT 1
=> #Role id:2,name:“installer”,authorizable_type:nil,authorizable_id:nil,created_at:“ 2010-09-16 14:11:24 ”,updated_at:“2010-09-16 14" 时11分24秒>
答案 0 :(得分:1)
acl9使用的habtm连接表可能没有其他属性。
如果在连接表中有created_at或updated_at属性,ActiveRecord会使用关联表的值(在您的情况下为Role)填充此值。
如果你想要这个功能,你必须编辑gem并在关系中添加一些:after_add回调过滤器,看看这个file的第41行
另外,updated_at没用,因为连接数据库表中的行已创建并删除,从未更新......
希望这会有所帮助,对不起我的英语。
答案 1 :(得分:0)
这实际上是由acl9文档中的错误引起的(因为habtm连接表不应该有时间戳)。我也修复了the docs,并且acl9 1.2现在也有一个用于该迁移的生成器:)