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

时间:2013-11-06 11:01:34

标签: ruby-on-rails ruby ruby-on-rails-3

我正在使用带有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)

之上销毁的值

我不知道我的代码中有什么幽灵。

2 个答案:

答案 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)

它适用于您的第一个示例,因为您没有加载所有用户。只是第一个(在数据库级别,而不是在数组级别)。