2010-06-06 19 views
0

我我有不同的類和控制器。 ,我需要的是模型的一個實例將在控制器可用/ 我現在做這樣的事情:一個類實例拋出所有控制器

def method1 
    inst = @MyClass.new(params) 
    inst.action 
    .... 
def method2 
    inst = @MyClass.new(params) 
    inst.action 
    .... 

,但我想是這樣的

def method1  
    @inst.action 
    .... 
def method2 
    @inst.action 

或self.inst我沒關係

我該怎麼辦呢?

def self.inst 
    MyClass.new(params) 
end 

不工作...

+0

你需要開始接受的答案是給你。 – DJTripleThreat 2010-06-06 19:09:00

回答

1

可以使用的before_filter回調。

繼承人你如何使用它

 

class YourController < ApplicationController 

    before_filter :find_resource 

    def action1 
     @some_instance.magic 
    end 

    def action2 
    @some_instance.magic 
    end 

    private 
    def find_resource 
     @some_instance = YourModel.find 
    end 

end 

你也可以指定回調與運行上的動作:只或:除了選擇

HTH

+0

謝謝,我想過這個。但在這種情況下YourModel.find將被執行多次。我搜索方法執行1次並且總是使用 – Falcon 2010-06-06 16:46:44

+0

每個請求只調用一次回調(每個請求也調用一次動作) – 2010-06-06 16:51:39

0

看起來你感到困惑時使用實例變量。

在你的代碼的第一部分,你說

inst = @MyClass.new(params) 
inst.action 

這是抓取存儲在實例變量@MyClass的對象,就可以調用new,並且在存儲的結果局部變量inst

但是,當你想要做@inst.action在第二組的代碼,你依靠@inst從方法self.inst,這是一種方法,而不是一個實例變量返回。此外,self.inst方法不再訪問@MyClass實例變量 - 它訪問名爲MyClass的常量。

認爲你想要什麼,從你寫的,是:

def inst 
    @MyClass.new(params) # access instance variable 
end 

def method1 
    inst.action # call a method that access the instance variable, then call `action` on that 
    # or `self.inst.action` would be equivalent 
    # ... 
end 
+0

,但我可以認爲@ MyClass.new(params)將執行每次然後我做2inst.action「? 我只想要1.new(params),並且每個控制器只有1個變量 – Falcon 2010-06-06 16:26:53

相關問題