業務**中,我們經常會用到各種狀態、型別表,通過判斷狀態或型別來設計業務邏輯。比如說我們有訂單orders
和訂單狀態order_statuses
,當訂單為草稿狀態時可以繼續往下操作,常見的判斷:
if order.order_status_id == 1
do_sth
end
為避免產生魔法發數字,我們會這麼寫:
status_id = orderstatus.find_by_name("草稿").try(:id)
if order.order_status_id == status_id
do_sth
end
上面這種先查詢,再比較的**會在各個方法中反覆出現,可以寫乙個通用的方法,每個model
中都可以呼叫。
上個專案使用的是rails 1.9.3
,所有的model
都是繼承activerecord::base
,做法如下:
module
activerecord
class
base
defmodel_status_is?(status_name, *matching_status)
st = self.send(status_name)
if !st or !st.code
return
false
end [matching_status].flatten.map(&:to_sym).include?(st.code.to_sym)
endendend
class
< activerecord::base
self.abstract_class = true
end言歸正傳,在rails 5
中我們實現上面的功能需要這樣做:
module
base
defself.included(base)
base.class_eval do
defmodel_status_is?(status_name, *matching_status)
st = self.send(status_name)
if !st or !st.code
return
false
end [matching_status].flatten.map(&:to_sym).include?(st.code.to_sym)
endendend
end
MVC4 EF為Model新增單獨的驗證屬性
可使用以下方式給 加上相關的 驗證屬性,這樣實體的驗證屬性就不會被例如 或其他工具自動生成的 所替換了 using system.componentmodel.dataannotations namespace ido.entities public class customermetadata 不...
為匿名型別新增方法
1 這個做法不太常用 2 這個方法要傳遞兩個引數,打算用擴充套件方法解決這個問題,但是擴充套件方法又不能用在匿名型別上,有點鬱悶 using system using system.collections.generic using system.linq using system.text fir...
linux 為普通使用者新增sudo許可權
1.修改visudo編輯器 預設編輯器修改為 vim 開啟 bashrc 檔案 sudo gedit bashrc 在 bashrc 檔案最後新增 export editor usr bin vim 重新整理檔案 source bashrc2.新增sudo 許可權 sudo 可設定指定 使用者 使用...