2009-09-21 65 views
0

簡單的問題 - 我有一個表單,我創建一個對象的實例。創建該對象(又名提交表單)後,我想重定向到與不同控制器的操作相關聯的新表單,並攜帶該實例變量來填充該表單的某些字段。將實例變量從一種形式傳遞到Rails中的不同控制器的動作

我知道我通常有2個選項,將該實例變量存儲在會話中或通過params傳遞它。我不能使用會話(由於各種原因,我不會讓你感到厭煩)。我困惑的params選項。

我應該知道這一點。 :(你會如何去這樣做?任何例子不勝感激!!

貝特西

回答

1

,您有兩種方法在您的控制器,一個爲每個表單(由相關模板渲染)。第一種形式應該張貼到第二個動作,然後將第二個動作可以傳遞請求參數爲實例變量,在第二個模板中可用。

class FooController 
    def bar 
    # setup instance variables and render first form 
    end 

    def baz 
    @bar_values = params[:bar] 
    # setup other instance variables and render second form 
    end 
end 

UPDATE0使用會話做它在兩個控制器。

class FooController 
    def new_baz 
    # setup instance variables and render the first form 
    end 

    def create_baz 
    # respond to posting of form data 
    session[:current_baz_values] = params 
    redirect_to :action => "baq", :controller => "bar" 
    end 
end 

class BarController 
    def baq 
    @baz_values = session[:current_baz_values] 
    # setup other instance variables and render the second form 
    end 
end 
+0

這很有幫助 - 但是如果從一個完全不同的控制器調用動作(或者在這種情況下是第二種形式),會發生什麼?所以在我的情況下,「酒吧」這個動作用一個表單來調用一個表演動作。當提交表單時,它會調用「create」操作並創建一個「bar」實例。完成創建後,我需要redirect_to new_elephant_path,但攜帶@bar的實例。我知道這聽起來像是非常糟糕的設計,但是當我仔細考慮這一點時,我仍然對這個解決方案感到好奇。 – Betsy 2009-09-21 02:58:12

+0

如果您打算使用重定向,那麼您需要將參數存儲在將在請求之間保持不變的位置。使用會話散列或數據庫表。 – 2009-09-24 05:13:08

0

你能以某種方式在另一個控制器中查找新創建的記錄,然後用它填充所需的信息嗎?

此外,除非您使用的是AJAX,否則您通常不希望在顯示頁面上對記錄進行修改操作。這些屬於編輯或更新頁面。如果你總是希望人們能夠在同一頁面上編輯一條記錄,我會在顯示頁面上使用一些AJAX,或者只是總是返回編輯/更新頁面而不是...

0

如果你不想要使用會話,你可以使用閃存變量來存儲你的參數。例如,flash [:my_params] = params,然後在params = flash [:my_params]的下一個請求中讀回它。關於閃存的好處是,它只保留下一個請求,並在此之後自動清除。

如果您在使用Ajax時正在尋找從客戶端傳遞值,那麼可能使用參數設置隱藏字段將會將它們傳遞給下一個請求。

相關問題