Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Rails 3-通过不工作找到__Ruby_Ruby On Rails 3_Activerecord_Findby - Fatal编程技术网

Ruby Rails 3-通过不工作找到_

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

我有一个奇怪的问题

我有两个模型用户和角色,它们之间有多对多关系。 我想在用户的角色集合中筛选名为“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.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配置好吗?