2012-01-30 22 views
0

在我的控制器中,我有兩個動作:"Select_users""Make_something"。 在「Select_users」我得到一個@var與用戶列表(這個用戶是從一個窗體在同一視圖中搜索生成),我需要爲每個這樣的插入......像:RoR:我如何使用一個變量從一個動作到另一個內部的同一個控制器?

@var.each do |v| 
    Table.create(:atribute => v.name) 
    end 

當我有我選擇的用戶列表我使用提交按鈕發送給我的「Make_something」操作。所以我想「傳遞」@var變量到「Make_something」動作來創建,但是我不能在「Make_something」中使用@var,因爲它只能在「Select_users」中訪問。

我讀過濾器,但我認爲他們不能幫助我解決這個問題。

謝謝!

+0

請發表您的實際控制代碼。只是在解釋中很難遵循。 – 2012-01-30 09:12:27

+0

user1054152,看看@ Pavling的答案 - 別人會誤導你。 – 2012-01-30 09:46:59

回答

1

如果你有共同的幾種方法的代碼,將其提取出來的另一種方法。

def select_users 
    @var = go_get_those_users 
end 

def make_something 
    go_get_those_users.each do |v| Table.create(:atribute => v.name) end 
end 

private 
def go_get_those_users 
    # do whatever you need to populate your collection 
    return [] 
end 

或者,您可以將所選用戶的ID列表傳遞給「make_something」。或者如果你確實想以某種方式堅持下去(我認爲這是某種形式的「多步驟形式嚮導」的一些描述),用戶數據庫,而不是會話 - 有一個「嚮導」模型,保留在D B。然後每個步驟都會傳遞wizard_id,並將其自己的值保存到嚮導中 - 這可以通過關係具有正常的AR關聯(針對您選擇的用戶)。

+0

感謝您的幫助球員,我終於在會話[]保存的搜索的參數並重複方法搜索用戶在兩個其他方法。 非常感謝! – francordie 2012-02-01 01:51:18

2

你可以利用before_filter。在任何操作定義之前,即在類定義之後添加下面的代碼。

before_filter :initialize_variable, :only => [:select_users, :make_something] 

這將確保該methodinitialize_variablecalledwhenever那些所謂的其他methods的任何它將initializevariable像下面。然後你可以直接使用這個變量。

def initialize_variable 
    @required_var = // get the details 
end 

用途:

def select_users 
    @required_var.each //...... 
end 

def make_something 
    @required_var.each //...... 
end 
+0

求你了......不要做,因爲你會斷碼的結束(在會議陳舊的對象將引發各種意想不到的問題),以及代碼的未來發展會罵你使用這種bodge – Pavling 2012-01-30 09:21:50

+0

更新代碼..這就是我們的代碼。 – 2012-01-30 10:43:08

+0

這是一種很好的編輯;-)是 - 要好得多不使用會話作爲傾銷地變量 – Pavling 2012-01-30 11:30:54

0

如何保證一個動作先於另一個動作。

如果您希望該數據爲特定用戶保留,然後將其保存在模型中。

也許有一個wizard模型與user_id和各個步驟的字段。

如果你想堅持只是會話然後使用session[:something]

檢查了這一點http://railscasts.com/episodes/119-session-based-model

相關問題