1

これが可能かどうかはわかりませんが、解決策を思いつくかどうか見てみましょう。これは多かれ少なかれ可読性の観点からコードの品質に関するものであり、実際の問題ではありません。私はすでに解決策を持っているからです。私は友情モデルとユーザーモデルを持っています。友情モデルは、2 人のユーザー間の友情をモデル化するために使用されます。

class Friendship

  def self.requested(user)
    where(:user_id => user).where(:status => 'requested')
  end

  def self.pending(user)
    where(:user_id => user).where(:status => 'pending')
  end

  def self.accepted(user)
    where(:user_id => user).where(:status => 'accepted')
  end

  # ...

end

class User
   has_many :friendships

   # ...
end

引数を指定せずに、ユーザー モデルを介して、要求された、保留中または承認されたスコープを呼び出すことは何とか可能ですか?

a_user.friendships.pending # this does not work, is there a way to get it working?

a_user.friendships.pending(a_user) # works of course!
4

1 に答える 1

4

議論を取り除けば、これはうまくいくはずだと思います。このようにユーザー オブジェクトから保留中を呼び出すと、既に適切なユーザーにフレンドシップの範囲が設定されているはずです。メソッドを次のように定義します。

def self.pending
  where(:status => 'pending')
end

そして呼び出します:

a_user.friendships.pending

動作していることがわからない場合は、生成されたクエリのログを確認してください。

それでも引数を渡して呼び出したい場合は、そのメソッドに名前を付けFriendship.pending_for(user)ます。

于 2011-04-11T21:00:51.113 に答える