ruby-on-rails - 所有者财产的默认顺序
问题描述
我有一个购物篮,里面有物品。我的课是BasketItem < ActiveRecord::Base。
一个 BasketItem belongs_to :item。
项目有很多item_tags。它还通过 item_tags有许多标签。
标签具有键值设置。键可以是“价格”、“易腐烂的”、“生产”等。“生产”键具有“柑橘类水果”、“浆果”、“瓜果”、“蔬菜”、“根”等值、“木耳”等。
拉篮子时,我希望物品以默认顺序返回:所有水果,真菌,然后是其他所有东西。
在 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_items 中提取,没有连接。
1)那么我如何订购该标签关系?2) 我如何把我的 CASE 放在那里?3)我如何将其设为默认值?(如果它不是 default_scope。)
谢谢!
解决方案
离开 Mike Heft 的评论并稍微清理一下语法,我最终得到:
default_scope {joins(:tags).order("CASE WHEN tags.name LIKE ...")}
这创建了一个 SQL 查询,它以正确的顺序返回事物。
(这最终又被打乱了,因为上面的代码只是提取产品的 ID,并按顺序返回它们。我在那个级别应用了相同的噱头......仍然让它们被打乱。所以,虽然我还是要分清谁负责什么,就是一个简单的“join().order()”。)
推荐阅读
- c# - asp.net core 3.1上的Json请求
- php - Laravel 验证错误未显示在视图中,仅显示在 422 发布错误中
- c# - 动画颜色变化时如何让 UI 更新
- reactjs - 来自 Axios 的数据返回 undefined React
- python - 通过 pandas 获得具有以下列的数据框:price、soldPrice、ProductId 和 typeTransaction(sell/return)。利润如何计入回报?
- asp.net-core - 访问 Razor 页面路由数据
- laravel - Laravel 更新后看不到现有的供应商类
- python - 在 django 中加入 2 个表
- sql - Postgres通过不使用子查询选择不同顺序的不同?
- jquery - 从 Javascript 访问 MVC 的模型属性以填充使用 json 的 jQuery 数据表