Вероятно, session[:user]
- это не Hash, как вы ожидаете, а массив.Таким образом, подписка на него чем-либо, кроме целого числа, недопустима.
Как это исправить?Измените код, который фактически устанавливает переменную сеанса (например, session[:user] = XYZ
).
EDIT: User.find(:all, ...)
возвращает массив, поэтому, как я и предполагал, вы назначаете массив для session[:user]
.Вы должны назначить только первого найденного пользователя (и фактически должен быть только один, соответствующий критериям).Более того, вам следует только сохранить имя пользователя в сеансе и извлечь его из базы данных, если необходимо:
def create
user = User.where(:username => params[:username], :password => Digest::SHA1.hexdigest(params[:username])).first
if user
session[:user_id] = user.id
else
redirect_to(:new, :notice => "You supplied an invalid username/password combination.")
end
end
Затем в действии, связанном с вашим представлением:
def ...
@user = User.find(session[:user_id])
unless @user
# redirect to error page, user was deleted in the meantime
end
end
Затем ввид:
<%= @user.username %>