Мой код для пост-контроллера выглядит следующим образом. Что я пытаюсь сделать, так это то, что пользователь должен иметь возможность удалять свои собственные сообщения, а admin_user может удалять любые сообщения. Следующий код заставляет admin_user удалять сообщения, но для обычного пользователя при попытке удалить свой собственный пост он перенаправляется на root_pathкак запустить два метода в before_filter?
Кажется, что do_authentication не работает должным образом, обычный пользователь пытается пройти аутентификацию в качестве администратора вместо «correct_user»
Что может быть неправильным?
Спасибо!
class PostsController < ApplicationController
before_filter :signed_in_user, only: [:index, :create, :destroy]
before_filter :do_authentication, only: :destroy
.
.
.
def destroy
@post.destroy
flash[:success] = "Post deleted!"
redirect_back_or user_path(current_user)
end
private
def do_authentication
correct_user || admin_user
end
def correct_user
@post = current_user.posts.find_by_id(params[:id])
redirect_to user_path(current_user) if @post.nil?
end
def admin_user
@post = Post.find_by_id(params[:id])
redirect_to(root_path) unless current_user.admin?
end
спасибо. Я наконец нашел способ, который работает. На самом деле проще, чем я думал, частный def do_authentication if current_user.admin? @ post = Post.find_by_id (params [: id]) else @ post = current_user.posts.find_by_id (params [: id]) redirect_to user_path (current_user), если @ post.nil? конец конец – alexZ