是否有方法檢查從模型中調用哪個控制器方法?rails:檢查從模型中調用哪個控制器方法
例: 說出控制器創建方法被調用:
def create
do something
end
然後在模型中做一些只有在控制器創建時被稱爲
if create?
do something
end
是否有方法檢查從模型中調用哪個控制器方法?rails:檢查從模型中調用哪個控制器方法
例: 說出控制器創建方法被調用:
def create
do something
end
然後在模型中做一些只有在控制器創建時被稱爲
if create?
do something
end
我想像你可以檢查調用堆棧,但這正是型號是而不是:他們現在應該沒有關於控制器。
檢查堆棧:
if caller.grep /create/
# do something
elsif caller.grep /update/
#do something else
end
應該做的伎倆。
只需將create
標誌傳遞給模型方法,或者在模型中創建兩種不同的方法並從控制器調用相應的方法。否則,你會在控制器和模型之間創建一個相當不愉快的依賴關係。如您所述,驗證方法需要一個參數來指定它們何時運行。
這是一個特例。有時你需要看看它來自何種方法。例如在驗證方法中有:on =>:create symbol – djburdick 2010-05-28 00:47:06
在這種情況下,只需使用'caller'方法返回一個名爲方法名稱的數組。 – 2010-05-28 15:22:37
一方面很高興知道這樣的事情是可能的。但是這對我來說就像@Jakub所說的那樣錯誤:這不是模型的目的。模型可以知道你是在創建一個新的對象還是在更新一個現有的對象。如果有需要的話,我會添加一個參數到我的初始化或其他東西。爲了讓模型儘可能無知和分離(更不用說可測試:你將如何測試這種行爲?)。 – nathanvda 2010-05-28 19:06:28