无法从Rails 3.1中的视图访问会话数组

时间:2012-01-22 06:00:20

标签: ruby ruby-on-rails-3 session ruby-on-rails-3.1 session-variables

所以这个让我难过;希望善良的灵魂可以帮助我。作为为执行操作的用户显示某些按钮的逻辑的一部分,我将他们操作的对象的id存储在名为" prayed_for"的会话数组中。 (这个问题的独特之处在于它处理会话而不是数据库中持久存储的数组。)在我的控制器的show动作中,我评估条目的当前id是否为请求出现在会话数组中#pray; prayed_for"。我将此布尔值分配给会话变量@already_prayed_for。以下是其逻辑:

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

但问题在于:我不能在我的部分评估这个问题。例如,如果我尝试评估以下内容(在HAML中),那么" entry"是一个表示手头条目的变量," id"是它的id,应该存储在会话中#pray; prayed_for"变量,它将始终评估为false

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

我得出的结论是,在评估会话数组中是否存在id时,我可能正在评估部分错误。此外,这个相同的概念在控制器动作中完美地工作(但是这次我不能使用该解决方案,它必须在部分中进行评估)但它在{{1}中也失败了}}。我们非常感谢您解决此问题的任何帮助!

更新 这是我在另一个操作中设置会话的代码:

ApplicationHelper

1 个答案:

答案 0 :(得分:1)

params[:id]可能是字符串,而entry.id是Fixnum。验证您要比较的对象(通过include?)是否属于同一类型。

您可能希望从您正在使用的逻辑中做出帮助,例如:

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