不可能 Rails 语法:Order has_many with polymorphic association

Impossible Rails Syntax: Order has_many with polymorphic association

这里是静态类型的、编译时检查的程序员大脑,正在努力处理 rails 函数调用。

在我们指定has_many的模型中,我们可以像这样指定排序顺序has_many :requirements, -> { order(created_at: :asc) }, :dependent => :destroy

但是当我们有一个像这样的多态关联时 has_many :text_fields, as: :describable, :dependent => :destroy 我们如何添加排序 lambda?

我已经尝试了所有可能的语法排列,显然,正确的排列除外。

您已阐明您要订购的是子记录 (text_fields)。你可以使用 default_scope,像这样:

class ParentModel < ApplicationRecord
  has_many :text_fields, as: :describable, :dependent => :destroy
end

class TextField < ApplicationRecord
  default_scope { order(created_at: :asc) }
end

但在这样做之前请三思,因为 default_scope is evil。除此之外,您不能覆盖 default_scope 中定义的 order。我不熟悉 requirements,但您也可能无法覆盖 requirements 中定义的顺序。

我认为像这样创建一个范围会更好:

class ParentModel < ApplicationRecord
  has_many :text_fields, as: :describable, :dependent => :destroy
end

class TextField < ApplicationRecord
  scope :default_order, -> { order(created_at: :asc) }
end

然后当您希望以这种方式排序记录时明确调用它:

TextField.all.default_order

parent_record.text_fields.default_order