2017-04-22 41 views
0

一種方法如下:如何獲取一個方法中的實例變量的值到同一控制器中的另一個方法?在我的控制器

def new_equipment_matches_wanted 
#..........Big chucnk of code of about 7 to 8 lines and then.. 
@receiver 
end 

現在我確定,我想訪問此@receiver實例變量的值的另一種方法。它將有一個單獨的模板。

def send_receivers_to_admin 
#supposedly I am trying send @receiver values here 
end 

我該如何做到這一點?或者我應該在第二種方法中編寫相同的代碼,也只是爲了訪問該變量中的值?

+4

在方法之間傳遞實例變量是沒有問題的。您只需將其定義爲一個,並且-bam-在其他人中可用。然而,在__requests__之間傳遞實例變量是不可能的(如果這就是你的兩個「方法」是 - 支持不同請求的控制器動作) –

+0

@SergioTulentsev如果它在請求之間,可以傳遞和iD然後從數據庫中取回它 –

+1

@GrahamSlick:如果你有一個ID,並且它存儲在數據庫中。仍然id的傳遞不是通過實例變量完成的。 –

回答

2

實例變量(帶@)在所有控制器的方法中共享。

def new_equipment_matches_wanted 
#..........Big chucnk of code of about 7 to 8 lines and then.. 
@receiver 
end 
def send_receivers_to_admin 
@receiver.do_something 
end 

你可以閱讀更多有關變量的here

然而,隨着塞爾吉奧說,

「在請求之間傳遞實例變量是不可能的...... 控制器行動支持不同的請求」

那麼你必須在兩種方法中加載@receiver,你可以使用before_action

class CustomController < ActionController::Base 
    before_action :load_receiver, only [:send_receivers_to_admin,:new_equipment_matches_wanted] 

def new_equipment_matches_wanted 
    @receiver.do_something 
end 

def send_receivers_to_admin 
@receiver.do_something 
end 

private 

def load_receiver 
    # Big chucnk of code of about 7 to 8 lines and then.. 
    @receiver 
end 
+0

我在Action Mailer文檔中看到它支持'after_action''after_action'和'around_action'。所以我可以使用它然後對嗎? – user3576036

+0

是的,它的工作原理是一樣的 – Gaston

相關問題