У меня возникли проблемы с пониманием сессий и аутентификации с помощью 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)
Спасибо, что разъясняет вещи – roonie