我正在使用带有psql的Rails-3
我的问题有点好笑。我不知道为什么它不起作用。
当我使用此代码时,一切都运行良好
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)
我不知道我的代码中有什么幽灵。
答案 0 :(得分:1)
可以说任何人都更清楚了:
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开始某种返回值?
答案 1 :(得分:1)
这是因为Rails可以缓存@sd.supplier_document_users
的结果。
在第二个示例中,@sd.supplier_document_users.blank?
加载数组中的所有用户并缓存结果。如果您稍后再次调用@sd.supplier_document_users
,它仍然是相同的数组。如果您想确保重新加载数组,请致电:@sd.supplier_document_users(true)
。
它适用于您的第一个示例,因为您没有加载所有用户。只是第一个(在数据库级别,而不是在数组级别)。