Ruby on rails 所有者属性的默认顺序

Ruby on rails 所有者属性的默认顺序,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我有一个购物篮,里面有东西。我的类是BasketItem{order(some\u column::desc)}到::product上放置order by子句

我有一个购物篮,里面有东西。我的类是BasketItem 篮子物品属于:物品

Item有许多Item_标记。它也有很多标签,通过item_标签

标记已设置键值。关键可以是“价格”、“易腐”、“农产品”等。“农产品”关键具有“柑橘类水果”、“浆果类水果”、“瓜果类水果”、“蔬菜”、“根”、“真菌”等价值

当拉动篮子时,我希望物品以默认顺序返回:所有水果、真菌,然后是所有其他物品

在SQL中,我会进行连接,然后添加:

ORDER BY (
   CASE
   WHEN tags.value LIKE '%fruit%' THEN 0
   WHEN tags.value = 'Vegetable' THEN 1
   ELSE 2
   END)
我试过:

has_many :tags, through: :produce
默认范围为:

default_scope { order(tags: :desc) }
只是想看看我是否可以访问标签,但我不能。事实上,查看SQL生成,它直接从没有连接的basket_项中提取

1) 那么我如何在标签关系上订购? 2) 我怎么把我的箱子放进去? 3) 我如何使其成为默认值?(如果不是默认的_范围。)


谢谢

听了Mike Heft的评论,稍微整理了一下语法,我的结论是:

default_scope {joins(:tags).order("CASE WHEN tags.name LIKE ...")}
这就创建了一个SQL查询,它以正确的顺序返回内容


(这最终会再次被置乱,因为上面的代码只是拉取产品的ID,并按顺序返回它们。我在该级别上应用了相同的gag,但…仍然将它们置乱。您可以添加更多的代码吗?在您的作用域和关系周围显示您现有的类?
default_scope{joins(item_tags::tags)order(item_tags:{tags::desc)}
可能会起作用。我认为您需要添加连接,然后按顺序遍历关联?您可以在has\u many
has\u many:tags,->{order(some\u column::desc)}到::product上放置order by子句