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: ここで私は別のアクションでのセッションを設定するコードは次のとおりです。entry.idはFixnumかである一方、

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

また、あなたがセッションを設定するコードの行(複数可)を投稿することができますか? – bricker

+0

これらのコード行については、私のアップデートをご覧ください:) –

答えて

1

params[:id]は、文字列かもしれません。比較しているオブジェクトが(include?を介して)同じタイプであることを確認してください。あなたがたとえば、あなたが使用しているロジックのうち、ヘルパーを作りたいかもしれません

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

私は今問題を理解しています!ありがとうございました!簡単な質問:私はMongoidを使用していますが、 '.to_i 'にアクセスできない。同じことをすることができる他の方法はありますか? –

+0

私は、あなたが提供したヘルパーで '.to_s'を使用しなければならないことが分かりました。手伝ってくれてどうもありがとう! –