[英]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.