簡單的問題 - 我有一個表單,我創建一個對象的實例。創建該對象(又名提交表單)後,我想重定向到與不同控制器的操作相關聯的新表單,並攜帶該實例變量來填充該表單的某些字段。將實例變量從一種形式傳遞到Rails中的不同控制器的動作
我知道我通常有2個選項,將該實例變量存儲在會話中或通過params傳遞它。我不能使用會話(由於各種原因,我不會讓你感到厭煩)。我困惑的params選項。
我應該知道這一點。 :(你會如何去這樣做?任何例子不勝感激!!
貝特西
簡單的問題 - 我有一個表單,我創建一個對象的實例。創建該對象(又名提交表單)後,我想重定向到與不同控制器的操作相關聯的新表單,並攜帶該實例變量來填充該表單的某些字段。將實例變量從一種形式傳遞到Rails中的不同控制器的動作
我知道我通常有2個選項,將該實例變量存儲在會話中或通過params傳遞它。我不能使用會話(由於各種原因,我不會讓你感到厭煩)。我困惑的params選項。
我應該知道這一點。 :(你會如何去這樣做?任何例子不勝感激!!
貝特西
,您有兩種方法在您的控制器,一個爲每個表單(由相關模板渲染)。第一種形式應該張貼到第二個動作,然後將第二個動作可以傳遞請求參數爲實例變量,在第二個模板中可用。
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
你能以某種方式在另一個控制器中查找新創建的記錄,然後用它填充所需的信息嗎?
此外,除非您使用的是AJAX,否則您通常不希望在顯示頁面上對記錄進行修改操作。這些屬於編輯或更新頁面。如果你總是希望人們能夠在同一頁面上編輯一條記錄,我會在顯示頁面上使用一些AJAX,或者只是總是返回編輯/更新頁面而不是...
如果你不想要使用會話,你可以使用閃存變量來存儲你的參數。例如,flash [:my_params] = params,然後在params = flash [:my_params]的下一個請求中讀回它。關於閃存的好處是,它只保留下一個請求,並在此之後自動清除。
如果您在使用Ajax時正在尋找從客戶端傳遞值,那麼可能使用參數設置隱藏字段將會將它們傳遞給下一個請求。
這很有幫助 - 但是如果從一個完全不同的控制器調用動作(或者在這種情況下是第二種形式),會發生什麼?所以在我的情況下,「酒吧」這個動作用一個表單來調用一個表演動作。當提交表單時,它會調用「create」操作並創建一個「bar」實例。完成創建後,我需要redirect_to new_elephant_path,但攜帶@bar的實例。我知道這聽起來像是非常糟糕的設計,但是當我仔細考慮這一點時,我仍然對這個解決方案感到好奇。 – Betsy 2009-09-21 02:58:12
如果您打算使用重定向,那麼您需要將參數存儲在將在請求之間保持不變的位置。使用會話散列或數據庫表。 – 2009-09-24 05:13:08