2013-07-13 2 views
0

Я получаю эту ошибку, когда пользователь пытается голосовать без первого подписания в:Рубин на Rails thumbs_up Перенаправить на пользователь Войти

неопределенный метод `vote_for» для ноль: NilClass

У меня есть стандартный «Post» scaffold, и пользователи голосуют за сообщения. Как вставить команду, которая перенаправляет их в user_sign_in, если они еще не вошли в систему?

class PostsController < InheritedResources::Base 
    def vote_up 
    begin 
    current_user.vote_for(@post = Post.find(params[:id])) 
    redirect_to [@post] 
    flash[:success] = "You have voted successfully" 
rescue ActiveRecord::RecordInvalid 
    redirect_to [@post] 
    flash[:error] = "You have already voted" 
    end 
end 

end 

ответ

2

Добавить before_filter :authenticate_user! в вашем PostController. В методе authenticate_user! проверьте сеанс пользователя, и если пользователь не подписан с переадресацией на путь sign_in.

Редактировать: Поскольку у вас уже есть Devise, добавление before_filter должно позаботиться о перенаправлении для входа в путь, если пользователь не выполнил вход. Следующие действия будут действовать только для действия vote_up, если вы хотите, чтобы такое же поведение для все действия, то вы можете заменить строку с before_filter :authenticate_user!

class PostsController < InheritedResources::Base 
    # Add before_filter here and devise should handle the redirection if the user is not signed in. 
    before_filter :authenticate_user!, only: [:vote_up] 

    def vote_up 
    begin 
    current_user.vote_for(@post = Post.find(params[:id])) 
    redirect_to [@post] 
    flash[:success] = "You have voted successfully" 
rescue ActiveRecord::RecordInvalid 
    redirect_to [@post] 
    flash[:error] = "You have already voted" 
    end 
end 

end 
+0

Я обновил свой пост с контроллером сообщений, вы можете показать мне пример шоу, чтобы сделать это точно? –

+0

У вас есть аутентификация? Как вы аутентифицируете пользователей? – vee

+0

Придумайте ... И Omniauth ... и еще пару вещей. Но да: у меня есть authenticate_user! на месте. –