私は現在、Rails 3InActionを読んでいます。誰かが私に説明できるかどうか疑問に思っていたコードがあります。私はそれを理解するのに苦労しています:
scope :readable_by, lambda { |user| joins(:permissions).where(permissions: { action: "view", user_id: user.id })}
ありがとう、マイク
私は現在、Rails 3InActionを読んでいます。誰かが私に説明できるかどうか疑問に思っていたコードがあります。私はそれを理解するのに苦労しています:
scope :readable_by, lambda { |user| joins(:permissions).where(permissions: { action: "view", user_id: user.id })}
ありがとう、マイク
これはRailsスコープと呼ばれます。基本的に、パーミッションテーブルでSQL結合を実行し、列の値が「view」で列の値がに等しい.readable_by(user)
レコードを返すというクラスメソッドを作成します。action
user_id
user.id
このように使用できます(Comments
モデルで定義されていると仮定します)。
readable_comments = Comments.readable_by(current_user)
何もしない単純なスコープは次のとおりです。
scope :my_scope_name, lambda {}
パラメータを受け入れるスコープは次のとおりです。
scope :my_scope_name, lambda { |my_parameter| }
そして、上記のスコープは、いくつかのActiveRecordファインダーメソッド、具体的にjoins
はとを使用しwhere
ます。