2

私のモデルでは:

#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
=> [] 

出力で承認済みが true であることに注意してください...おかしくなる場所は次のとおりです。

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>] 

何か足りない?

編集: 一方で、このクエリがあります:

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'
 => []
4

1 に答える 1

0

:status フィールドは Friend モデルにあるため、スコープをこれに変更する必要がある場合があります

スコープ :approved_friend, where('friends.approved' => true).includes(:friend)

于 2013-04-23T13:36:25.233 に答える