不可能的Rails语法:使用多态关联命令has_many

时间:2017-09-25 15:52:31

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

您已澄清它是您要订购的子记录(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

但在这样做之前要认真思考,因为Redemption。除此之外,您无法覆盖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