2013-03-23 100 views
0

我的控制器中有兩個動作:search,show_db。Ruby on rails,將參數從一個動作傳遞到另一個動作

說,他們是這樣的:

def search 
    @uploads=current_user.uploads  
end 

def show_db 
end 

我需要從search肌動傳遞參數(@uploads)到show_db -action。 (我知道我可以寫在show_db@uploads=current_user.uploads,但我不能,它要複雜得多。) SMT是這樣的:

def search 
     @uploads=current_user.uploads 
     show_db(@uploads)  
end 

def show_db(list) 
    blablabla 
end 

是否有可能做=)

提前非常感謝?

+0

你會告訴我們爲什麼你不能在show_db動作 – 2013-03-23 23:39:34

+0

上實例上傳它太複雜了,它在處理上面遇到的問題時不起作用。我只需要知道是否可以將一個參數從一個動作傳遞給另一個動作。 – Tonja 2013-03-23 23:59:58

+0

是的,像任何其他Ruby方法一樣使用參數來調用它。但它是一個實例變量,所以你甚至不需要。 – 2013-03-24 00:19:55

回答

0

如果你想一個方法的結果傳遞給另一個是用Ruby非常簡單,你的第二個代碼塊應該工作,你只需要在你的方法使用列表變量從參數

def show_db(list) 
    x = list 
    list.do_somethings 
    etc 
end 
+0

它的方法是否在控制器中並不重要? – Tonja 2013-03-24 00:19:38

+0

廣義而言,沒有。話雖如此,如果你正在創建一套非常複雜的方法,你可能想要把它分解成它自己的類或模塊。 – muttonlamb 2013-03-24 00:20:50

0

創建第三種方法,知道如何創建@uploads,從兩個操作中使用它。

另外,如果在你的索引行動要渲染@uploads變量show_db,你可以這樣做:

def search 
    @uploads=current_user.uploads 
    if something 
    return show_db(@uploads) 
    end 
end 

def show_db(list) 
    blah 
    render 'show_db' 
end 

但在這種情況下,show_db只是一種方法,而不是一個控制器動作。

+0

我需要它作爲一個控制器動作 – Tonja 2013-03-24 08:27:45

+0

你所要求的不能做到明智,我絕對推薦從兩個控制器動作中提取公共邏輯變成非動作方法。 – 2013-03-24 10:22:12

0

您可能希望跨操作使用變量。您應該知道,每次您從瀏覽器發出請求時,都會創建一個新的控制器實例。因此,你的變量不會像他們應該那樣工作,因爲你實際上會試圖跨實例訪問一個實例變量。一個不可能的任務 我建議使用會話來存儲跨多個請求的信息。 Google瞭解如何使用會話。

相關問題