2009-10-20 24 views
1

我有一個控制器與一些非標準的行動,如管理員,溫和等我嘗試使用鉤子before_admin它沒有工作。是否有可能爲我的自定義操作使用這些鉤子?自定義之前/之後鉤在軌道上的非標準動作?

對不起,缺乏清晰度。假設我在保存前想要發生某些事情,那麼只需在模型中執行before_save :do_whatever即可。我想有一個像before_admin :do_somethingbefore_moderate :do_something的東西,其中這些是我的控制器中的自定義方法。

+0

對不起,我想我真的不明白你的問題了。你能澄清嗎?示例代碼? – Ben 2009-10-20 20:00:36

+0

如果我正確理解你的話:do_something在你的控制器中,你想在你的模型鉤子中使用這些方法?這不是針對MVC? – edthix 2009-10-20 23:59:14

回答

1

如果我理解你的話,你需要一個before_filter。

class MyController < ActionController::Base 
    before_filter :do_whatever, :only => :admin 

    def admin 
    # Code for your controller action 
    end 

    private 

    def do_whatever 
    # Code that runs before the admin action 
    end 
end 

請參閱here瞭解更多信息。

編輯:如果你想要不同的控制器/動作對模型做不同的事情,那麼放置該邏輯的適當位置就在控制器中。正確的MVC設計可以讓模型無視控制它的控制器/動作。現在看起來似乎很不方便,但從長遠來看,它會讓你的代碼保持清潔和可用。

再次編輯:對不起,你問的是爲什麼,而不是爲什麼,我完全錯過了。你會這樣做:

def action 
    @thing = Thing.find(params[:id]) 
    @thing.boolean = true 
    @thing.save 
end 
+1

但我不想在我的控制器中做到這一點。我可以做任何事情,但我需要改變特定對象的屬性(所討論的那個)。我知道如何做到這一點的唯一方法就是當你在某個模型中時。 基本上,我只是想總是在模型中設置一個布爾值,具體取決於它剛剛經過的操作。 – 2009-10-20 20:40:52

相關問題