我有一個模型User,它可以是個人或公司,具體取決於布爾值is_company
的值。如果用戶是公司,則company_name
存儲該名稱;如果用戶是個人,first_name
和last_name
存儲他們的名字。在ActiveRecord中使用SELECT CASE語句,作爲Rails模型default_scope
在絕大多數情況下,我希望用戶按默認排序爲last_name
或company_name
,所以我在我的用戶模型中使用了default_scope。
但是,我擁有它的方式 - 即使它適用於SQLLite - 也不是數據庫不可知的。任何人都可以讓我知道我可以重構這個在case語句中接受「true」的參數嗎?
default_scope select('users.*')
default_scope select('CASE WHEN is_company = "t" THEN company_name ELSE last_name END AS sort_name')
default_scope order('sort_name ASC')
謝謝!
也許你應該拆分這兩個實體? – Bohdan