我用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条件时(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)上面销毁了它
我不知道我的密码里有什么鬼。
发布于 2013-11-06 12:05:09
这是因为@sd.supplier_document_users的结果可能被Rails缓存。
在第二个示例中,@sd.supplier_document_users.blank?将所有用户加载到一个数组中并缓存结果。如果稍后再次调用@sd.supplier_document_users,则仍然是相同的数组。如果要确保重新加载数组,请调用:@sd.supplier_document_users(true)。
它在您的第一个示例中有效,因为您没有加载所有用户。只是第一个(在数据库级别,而不是在数组级别)。
发布于 2013-11-06 11:50:44
可以说,其中任何一个都要清楚得多。
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返回某种类型的值?
https://stackoverflow.com/questions/19810331
复制相似问题