【问题标题】:Destroy is not working properly in rails 3Destroy 在 Rails 3 中无法正常工作
【发布时间】:2013-11-17 14:04:56
【问题描述】:

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

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

【问题讨论】:

  • blank? 不会破坏任何东西,如果这就是你的意思。
  • 空白?我仅用于检查该表是否为空。
  • 首先在 codereview.stackexchange.com 上完成您的代码审查。为什么你没有对正在销毁的对象的引用,然后 pry/puts(debug) 来检查它是否真的被销毁了,你的日志文件也会有 DELETE 查询
  • Amol Pujari @spickermann 代码解决了我的问题

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


【解决方案1】:

这是因为@sd.supplier_document_users 的结果可能会被Rails 缓存。

在您的第二个示例中,@sd.supplier_document_users.blank? 将所有用户加载到一个数组中并缓存结果。如果您稍后再次调用@sd.supplier_document_users,它仍然是同一个数组。如果您想确保重新加载数组,请致电:@sd.supplier_document_users(true)

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

【讨论】:

    【解决方案2】:

    可以说它更清晰?:

    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 有某种返回值?

    【讨论】:

    • 感谢@Tumas 的努力。学习新事物吗? :)
    猜你喜欢
    • 2011-08-30
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多