【发布时间】:2012-01-23 20:16:51
【问题描述】:
我有一个奇怪的问题。
我有两个模型用户和角色,它们之间存在多对多关系。 我想在用户的角色集合中过滤名称为“管理员”的角色。
在模型中这段代码
puts self.roles.to_s
打印到屏幕: [角色id:1,名称:“管理员”,created_at:“2012-01-22 21:55:45”,updated_at:“2012-01-22 21:55:45”]
但是这段代码
puts self.roles.find_by_name('Administrator').to_s
不打印任何东西。还有这个:
puts self.roles.find_by_name('Administrator').nil?
打印正确!
为什么我的 find_by_name 方法不起作用? 我在控制台中尝试了它,它运行良好。
我的代码 sn-p 如下:
puts self.roles.to_s
puts self.roles.find_by_name('Administrator').to_s
puts self.roles.find_by_name('Administrator').nil?
输出如下:
[Role id: 1, name: "Administrator", created_at: "2012-01-22 21:55:45", updated_at: "2012-01-22 21:55:45"]
<none>
true
我做错了什么??它必须是愚蠢的。 此代码位于 validate 方法中,因此在保存用户之前执行。
【问题讨论】:
-
两个表中都有名称列吗?
-
调用
find_by_name时数据库中的新角色吗? -
你能发布你的 habtm 配置吗?
标签: ruby ruby-on-rails-3 activerecord findby