Cancan を使用してコメント リソースを承認し、認証するように工夫しています。私は次のコントローラーを持っています.deviseを使用してサインインしていないときに新しいコメントを投稿しようとすると、コメントを作成するにはサインインする必要があるため、ユーザーはサインインページ(new_user_session_path)にリダイレクトされます。remote: true
ただし、サインインせずに新しいコメントを投稿すると、アクションが実行されcreate.js.erb
、Chrome コンソールで HTML がレンダリングされ、解析中にエラーが発生します@comments.any?
。これは nil であるはずです。ただし、ユーザーがサインインしていないのにコメントを送信したい場合は、代わりに :unauthorized または 501 のようなステータス コードを取得したいので、jQuery でキャッチしてサインイン フォームを表示できます。私はgem cancan
提供されたと思ったload_and_authorize_resource
私のリクエストがアクションにヒットすることさえ防ぎますが、明らかにそうではありません。ステータス応答を取得し、アクションを実行しないようにするにはどうすればよいですか? ありがとうございました!
class CommentsController < ApplicationController
load_and_authorize_resource
#should I also add a devise authenticate_user! before filter here?
def create
@commentable = find_commentable
@comment = current_user.comments.build(params[:comment].merge(:commentable => @commentable))
if @comment.save
respond_to do |format|
format.html { redirect_to @commentable, :notice => "Successfully created comment."}
format.js {@comments = @commentable.comments}
end
else
respond_to do |format|
format.html { redirect_to @commentable, :notice => "Comment NOT created."}
format.js { render :status => :internal_server_error }
end
end
end
end