[英]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.