2011-02-08 6 views
1

ギャラリーを閲覧する権限を持つユーザだけがギャラリーにアクセスできるようにしようとしています。ギャラリーはパーミッションを通して多くの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の使用に切り替えることが私の最大の関心事ですか(それがうまくいくかどうか)。

答えて

0

うわー、大丈夫。私がそうしているように、私は通常問題を解決する方法のブレーンストーミングを得るので、ここで質問を書くことは本当に役に立ちます。 @galleryオブジェクトを使用する代わりに、私はただGallery.find(params[:id])を使用し、すべてが魅力のように機能します。私はすべてのコードを書き直す必要はありません神に感謝します。

関連する問題