【问题标题】:How do I destroy a ActiveModel instance with dependant destroy children that have a default ordering?如何销毁具有默认排序的依赖销毁子级的 ActiveModel 实例?
【发布时间】:2013-12-02 21:01:46
【问题描述】:

在 Rails 4.0 中,我有 2 个 ActiveRecord 类:

class Sequence < ActiveRecord::Base

    has_many :steps, dependent: :destroy

end

class Steps < ActiveRecord::Base

    belongs_to :sequence

    default_scope -> { order('order ASC') }

end

当我打电话给mySequence.destroy 时,我收到了这个错误:

PG::SyntaxError: ERROR: 在“order”处或附近出现语法错误 LINE 1: ...steps" WHERE "steps"."sequence_id" = $1 ORDER BY order ASC ^ : SELECT "steps".* FROM " steps" WHERE "steps"."sequence_id" = $1 ORDER BY order ASC

当我删除默认范围时,错误消失了,但我显然必须在我的代码中按顺序排列步骤。 我确实尝试像这样定义关联,并省略了 default_scope 语句:

class Sequence < ActiveRecord::Base

    has_many :steps, dependent: :destroy, order: 'order ASC'

end

但它抛出了同样的错误。

还有其他人有这个问题吗?这是Rails中的错误吗?我想在孩子的销毁 sql 语句中不需要排序。

【问题讨论】:

  • 你能用你在steps类中的上述代码试试mySequence.unscoped.destroy
  • 嗯,为#<0x007f086812c0b0>

标签: ruby-on-rails activerecord ruby-on-rails-4 associations


【解决方案1】:

我也在 rails gitHub 问题页面上发布了这个问题。 gitHub user tanraya 提出了以下优雅的解决方案。

default_scope -> { order order: :asc }

感谢来自这里的 tanraya 和荣誉!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多