簡體   English   中英

在rails 3中,Destroy無法正常工作

[英]Destroy is not working properly in rails 3

我正在使用Rails-3和psql

我的問題有點好笑。 我不知道為什么它不起作用。

當我使用這個代碼時,一切都很完美

if @sd.supplier_document_users.first.status.eql?("Waiting")
   @sd.supplier_document_send_to_fi_user_lists.destroy_all
   @sd.supplier_document_users.first.destroy
   @fi_destroy_status = true
end

這里@sd.supplier_document_users返回[]

當我添加這個if條件(如果!@sd.supplier_document_users.blank?)這樣的話

if !@sd.supplier_document_users.blank?              
    if @sd.supplier_document_users.first.status.eql?("Waiting")
       @sd.supplier_document_send_to_fi_user_lists.destroy_all
       @sd.supplier_document_users.first.destroy
       @fi_destroy_status = true
    end
end

這里@sd.supplier_document_users返回我在上面銷毀的值( @sd.supplier_document_users.first.destroy)

我不知道我的代碼中有什么幽靈。

可以說它更清楚了嗎?:

if @sd.supplier_document_users.any?              
    if @sd.supplier_document_users.first.status.eql?("Waiting")
       @sd.supplier_document_send_to_fi_user_lists.destroy_all
       @sd.supplier_document_users.first.destroy
       @fi_destroy_status = true
    end
end

或者你可以像這樣寫:

if @sd.supplier_document_users.any? && @sd.supplier_document_users.first.status.eql?("Waiting")
   @sd.supplier_document_send_to_fi_user_lists.destroy_all
   @sd.supplier_document_users.first.destroy
   @fi_destroy_status = true
end

在任何情況下它是如何工作的? 內部if中的代碼是否未被執行,或者您是否期望從if獲得某種返回值?

這是因為@sd.supplier_document_users的結果可能會被Rails緩存。

在你的第二個例子中@sd.supplier_document_users.blank? 加載數組中的所有用戶並緩存結果。 如果再次調用@sd.supplier_document_users ,它仍然是相同的數組。 如果要確保重新加載數組,請調用: @sd.supplier_document_users(true)

它適用於您的第一個示例,因為您沒有加載所有用戶。 只是第一個(在數據庫級別,而不是在數組級別)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM