2013-04-23 72 views
2

在我的模型,我有:Rails的ActiveRecord的:范围不连贯

#models/friend.rb 
scope :approved_friend, where(:approved => true) 

和Rails控制台输出:

User.find(2).friends 
=> [#<Friend id: 18, user_id: 2, approved: true, created_at: "2013-04-23 09:18:59", updated_at: "2013-04-23 09:18:59", friend_id: 1>] 

User.find(2).friends.approved_friend 
=> [] 

注意,批准在输出真的...... 它得到疯狂是在这里:

User.find(1).friends.approved_friend 
=> [#<Friend id: 19, user_id: 1, approved: true, created_at: "2013-04-23 09:19:36", updated_at: "2013-04-23 09:19:36", friend_id: 2>] 

AM-MI我什么东西?

编辑: 一方面你有这样的查询:

SELECT "friends".* FROM "friends" WHERE "friends"."user_id" = 2 

=> [#<Friend id: 18, user_id: 2, approved: true, created_at: "2013-04-23 09:18:59", updated_at: "2013-04-23 09:18:59", friend_id: 1>] 

在另一方面,你有这个(通过查询范围):

SELECT "friends".* FROM "friends" WHERE "friends"."user_id" = 2 AND "friends"."approved" = 't' 
=> [] 
+0

您可以检查日志中的相应查询。您的范围是在朋友模型上,并且您正在使用它与用户模型。 – Rubyman 2013-04-23 10:54:56

+0

请重新启动您的控制台会话并在此处发布日志。 – Simpleton 2013-04-23 11:04:30

+0

用下面的命令重新加载你的控制台'reload!' – sameera207 2013-04-23 11:48:32

回答

0

由于:状态字段位于Friend模型中,您可能必须将范围更改为此

范围:approved_friend,其中('friends.appro ved'=> true).includes(:friend)

+0

范围在friend.rb中,不用做这个(尽管,我已经测试过它,同样的事情)。 – zakelfassi 2013-04-23 13:39:59