為所有model新增通用的方法

2021-08-10 12:43:11 字數 1374 閱讀 5902

業務**中,我們經常會用到各種狀態、型別表,通過判斷狀態或型別來設計業務邏輯。比如說我們有訂單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 可設定指定 使用者 使用...