簡體   English   中英

不可能的Rails語法:命令has_many具有多態關聯

[英]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這樣的多態關聯時,例如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是邪惡的 除其他事項外,您無法覆蓋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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM