ギャラリーを閲覧する権限を持つユーザだけがギャラリーにアクセスできるようにしようとしています。ギャラリーはパーミッションを通して多くのshared_usersを持ち、その逆もあります。ギャラリーには所有者が1人しかいません。所有者と共有ユーザーは両方ともUserクラスです。これはすべて正常に動作します。私が持っている問題は、私のアクセスフィルタです。Rails 3のbefore_filterメソッドにコントローラメソッドの属性を渡す
私は、ユーザーが、彼らがアクセスしようとしているギャラリーを参照することが許可されているかどうかを確認するために、次のコードを使用しています:can_view?
は、私が設定してい@gallery
を必要とし、あなたが見ることができるように
def authenticate_viewers!
if user_signed_in? && current_user.can_view?(@gallery)
return true
end
redirect_to root_url,
:notice => "You must have permission to view this gallery."
return false
end
をshow
メソッドでは、before_filter
は、メソッドが実行される前に解決されるため、メソッドで設定された属性にアクセスすることはできません。許可されていないユーザーがギャラリーを表示しようとしない限り、after_filter
を使用してください。そうであれば、after_filter
はページのレンダリングを許可してから、リダイレクトを試みるため、DoubleRenderエラーが発生します。
@galleryの代わりにparams [:id]を使うことができたと思っていますが、まだ試していませんが、最終的にはオブジェクトの代わりに整数を渡す方が効率的です。いずれにしても、現在のコードを動作させる方法はありますか?またはparamsの使用に切り替えることが私の最大の関心事ですか(それがうまくいくかどうか)。