0

所以这一个让我难住;希望有一个善良的灵魂能帮助我。作为显示执行操作的用户的某些按钮的逻辑的一部分,我将它们操作的对象的id存储在名为“prayed_for”的会话数组中。 (这个问题的独特之处在于它处理会话,而不是在数据库中保存数组)。在我的控制器的show动作中,我评估被请求条目的当前id是否存在于会话数组“prayed_for”。我将这个布尔值赋给会话变量@already_prayed_for。下面是该逻辑:无法从Rails 3.1中的视图访问会话数组

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

但这里有一个问题:我不能在我的部分评估此。例如,如果我尝试评估以下内容(在HAML中),其中“entry”是表示手头条目的变量,“id”是id,应存储在会话“prayed_for”变量中,它将始终评估到false

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

我来,我可以评价一个ID是否存在于会话阵列时,可以评估错误的东西在我的部分结论。此外,这个相同的概念在控制器操作中完美工作(但我不能在这次使用该解决方案,它必须在部分中进行评估),但它也在ApplicationHelper中失败。非常感谢解决这个问题的任何帮助!

UPDATE: 这里就是我在另一个行动组的会议代码:

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

你能还张贴的代码行(S),你设置的会议? – bricker

+0

请看我对这些代码行的问题的更新:) –

回答

1

params[:id]可能是一个字符串,而entry.id是一个Fixnum。确认您正在比较的对象(通过include?)属于同一类型。

你可能想造一个配偶帮助您所用的逻辑,例如:

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

我现在明白了这个问题!谢谢!一个简单的问题:我使用的是Mongoid,无法访问'.to_i'。有没有其他方法可以用来做同样的事情? –

+0

我发现我不得不在你提供的帮助器中使用'.to_s'来使所有的参数字符串表示都起作用。非常感谢你的帮助! –