1

Я использую Rails 5. В моем контроллере приложения, у меня есть:Получение «Undefined метода» при попытке создать фильтр в контроллере

private 

def current_user 
@current_user ||= User.find_by(id: session[:user_id]) 
end 

затем, в другом контроллере у меня есть:

class MyObjectsController < ApplicationController 

before_filter !current_user { redirect_to root_path }, except: [:search] 

, но я получаю сообщение об ошибке:

undefined method `current_user' for MyObjectsController:Class 

Что я делаю неправильно и как я могу применить фильтр к каждому методу в моем контроллере е xcept метод search?

ответ

0

Как вы его используете, при загрузке класса вызывается current_user method, он не будет доступен на этом уровне. Он доступен только во время запроса. Это то, что вы, вероятно, имели в виду.

before_filter :require_current_user, except: [:search] 

def require_current_user 
    redirect_to(:root, :notice => "you must be logged in") unless current_user 
end 

Если вы используете завещать, вы должны быть в состоянии

before_action :authenticate_user!, :except => [:search]