Ruby Rails 3-通过不工作找到_
我有一个奇怪的问题 我有两个模型用户和角色,它们之间有多对多关系。 我想在用户的角色集合中筛选名为“Administrator”的角色 在模型中,此代码Ruby Rails 3-通过不工作找到_,ruby,ruby-on-rails-3,activerecord,findby,Ruby,Ruby On Rails 3,Activerecord,Findby,我有一个奇怪的问题 我有两个模型用户和角色,它们之间有多对多关系。 我想在用户的角色集合中筛选名为“Administrator”的角色 在模型中,此代码 puts self.roles.to_s puts self.roles.find_by_name('Administrator').to_s 打印到屏幕: [角色id:1,名称:“管理员”,创建时间:“2012-01-22 21:55:45”,更新时间:“2012-01-22 21:55:45”] 但是这个代码 puts self.rol
puts self.roles.to_s
puts self.roles.find_by_name('Administrator').to_s
打印到屏幕:
[角色id:1,名称:“管理员”,创建时间:“2012-01-22 21:55:45”,更新时间:“2012-01-22 21:55:45”]
但是这个代码
puts self.roles.to_s
puts self.roles.find_by_name('Administrator').to_s
没有打印任何东西。还有这个:
puts self.roles.find_by_name('Administrator').nil?
真的
为什么我的按名称查找方法不起作用?
我在控制台上试过,效果很好
我的代码片段如下所示:
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
[角色id:1,名称:“管理员”,创建于:“2012-01-22 21:55:45”,更新于:“2012-01-22 21:55:45”]
真的
我做错了什么??一定是什么蠢事。
此代码位于验证方法中,因此在保存用户之前执行。您提到在保存模型之前的验证中执行此操作。这就是它失败的原因。由于
用户
尚未保存,因此您的数据库中没有id
,因此它无法搜索您的关联
第一行之所以有效(self.roles.to_s
)是因为Rails会记住您添加到用户中的任何角色,但在保存用户之前不会将它们保存到数据库中。保存用户后,第二行/第三行将正常工作:
user = User.new
user.roles << Role.first
user.roles
# => [#<Role id: 1, name: "Administrator" ...>]
user.roles.find_by_name("Administrator")
# => nil
user.save # This inserts both the new user AND the associations
user.roles.find_by_name("Administrator")
# => #<Role id: 1, name: "Administrator" ...>
两个表中是否都有名称列?当您调用
按名称查找时,数据库中是否有新角色?请发布您的habtm配置好吗?