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'來使所有的參數字符串表示都起作用。非常感謝你的幫助! –