2015-02-21 2 views
0

У меня возникли проблемы с пониманием сессий и аутентификации с помощью Rails. Поэтому в основном я попытался установить сеанс на основе user_id, следуя учебнику из книги. Вот способ создать в моем sessions_controller.rb файл:Сессии и user_id в rails

def create 
if user = User.authenticate(params[:email], params[:password]) 
    session[:id] = user.id 
    redirect_to root_path, :notice => 'Logged in successfully' 
else 
    flash.now[:alert] = "Invalid login/password combination" 
    render :action => 'new' 
end 

конца

Но, когда я пытаюсь определить метод current_user в моем файле application_controller.rb, он просит меня ссылаться на сессии, основанную на user_id:

def current_user 
    return unless session[:user_id] 
    @current_user = User.find_by_id(session[:user_id]) 
end 

Вот что меня смущает - user_id является атрибутом каждого рецепта (эквивалент статей или сообщений в моем приложении), что создает отношения HAS_ONE с пользователем. нигде в моем приложении не определен user_id. поэтому user_id не должен быть атрибутом Пользователя, правильно?

Просто чтобы прояснить, я перечислил параметры для объектов пользователей и Recipe объектов из консоли рельсов:

2.0.0-p598 :019 > Recipe 
    => Recipe(id: integer, title: string, body: text, published_at:  
    datetime, created_at: datetime, updated_at: datetime, user_id: 
    integer, photo_of_recipe_file_name: string, 
    photo_of_recipe_content_type: string, photo_of_recipe_file_size: 
    integer, photo_of_recipe_updated_at: datetime) 

    2.0.0-p598 :020 > User 
    => User(id: integer, email: string, hashed_password: string,  
    created_at: datetime, updated_at: datetime, username: string) 

ответ

2

В вашем методе создания должна быть

session[:user_id] = user.id 

Вы настраиваете ключ :user_id в сеансе хеширования и сохранение идентификатора пользователя user.id в нем для последующего использования

Ключевое имя может быть любым

+0

Спасибо, что разъясняет вещи – roonie