Не удается получить доступ к массиву сеансов из представления в Rails 3.1 - PullRequest
0 голосов
/ 22 января 2012

Итак, этот меня поставил в тупик;надеюсь, добрая душа поможет мне.Как часть логики для отображения определенных кнопок для пользователей, которые выполнили действие, я сохраняю идентификатор объекта, которым они манипулировали, в массиве сеансов, называемом "praed_for". (Уникальной частью этой проблемы является то, что она имеет дело с сессиями, а не с массивом, сохраняемым в базе данных.) В действии show моего контроллера я оцениваю, является ли текущий идентификатор запрашиваемой записиприсутствует в массиве сессийЯ присваиваю это логическое значение переменной сеанса @already_prayed_for.Ниже приведена логика для этого:

@already_prayed_for = (session[:prayed_for] ||= []).include? params[:id]

Но вот проблема: я не могу оценить это в своей части.Например, если я попытаюсь оценить следующее (в HAML), где «запись» - это переменная, представляющая под рукой запись, а «идентификатор» - это ее идентификатор, который должен быть сохранен в переменной сеанса «rayed_for », он всегда будет оцениватьна false:

-if (session[:prayed_for] ||= []).include? entry.id

Я пришел к выводу, что, возможно, я оцениваю что-то неправильно в своей части, когда оцениваю, присутствует ли идентификатор в массиве сеанса.Кроме того, эта та же самая концепция отлично работала в действии контроллера (но я не могу использовать это решение на этот раз, оно должно быть оценено в частичном порядке) , но оно также не удалось в ApplicationHelper.Любая помощь в решении этой проблемы очень ценится!

ОБНОВЛЕНИЕ: Вот код, где я устанавливаю сеанс в другом действии:

if @entry.save
  (session[:prayed_for] ||= []) << params[:id]
end

1 Ответ

1 голос
/ 22 января 2012

params[:id] может быть строкой, в то время как entry.id является Fixnum.Убедитесь, что сравниваемые объекты (через include?) относятся к одному и тому же типу.

Возможно, вы захотите создать помощника из используемой вами логики, например:

def already_prayed_for?(entry_id)
  (session[:prayed_for] ||= []).include? entry_id.to_i
end
...