我有代码:
scope :workflow_sort, ->{ has_content.joins(:client).reorder(:clients => :position, :projects => :position) }
通过关联对联接中的两个对象进行排序。 Client
是父级,有许多Projects
。两者都具有属性position
。我正在尝试按Client Position
然后project position
使用上面的代码时,我会看到屏幕截图中显示的Direction "position" is invalid. Valid directions are: [:asc, :desc, :ASC, :DESC, "asc", "desc", "ASC", "DESC"]
。如何对每个位置ASC
进行有效的更改?
答案 0 :(得分:0)
如果您的关系中存在某些现有订单,并且您希望按新订单替换现有订单,则通常使用reorder。 但是,如果您没有在关系上定义任何订单(或范围),则可以使用订单:
scope :workflow_sort, -> { has_content.joins(:client).order('clients.position asc, projects.position asc') }
但是,如果您的关系中有任何预先存在的订单,那么请使用重新排序一次以将当前订单替换为新订单,然后使用更多属性进行更多后续订单链调用:
scope :workflow_sort, -> { has_content.joins(:client).reorder('clients.position asc').order('projects.position asc') }
答案 1 :(得分:0)
User.order('email DESC').reorder('id ASC').order('name ASC')
使用'ORDER BY id ASC,名称ASC'生成查询。
所以在你的情况下它应该是
scope :workflow_sort, -> { has_content
.joins(:client)
.reorder('clients.position ASC')
.order('projects.position ASC') }
或
scope :workflow_sort, -> { has_content
.joins(:client)
.reorder(:clients => :position)
.order(:projects => :position) }