2011-10-13 24 views
0

我已經在rails項目中創建了一個實例變量,它從url參數(如example.com/value)中獲取它的值。這個變量是在new動作中創建的,現在也可以在create動作中使用同一個模型。在rails中的實例變量 - 除了我們可以使用它的視圖和它可用多長時間

value是另一個模型的id完全和兩個模型相關聯,我需要在以前的模型中創建實例變量。

我需要知道,實例變量可用多長時間,並且可以在另一個模型中使用一個模型的實例變量。

澄清真實的例子

Supposingly有兩種模式,一種是User模型等爲Referral模型。根是root :to => 'users#new。現在用戶將通過example.com/value來到這裏,其中valueidReferral模型。現在使用這個value我必須增加兩個字段:一個是visits,它顯示了特定網址帶來的訪問次數。其他是signup,如果使用value進行註冊,它將會增加。

我已通過此value通過路線users#new,我用它來增加Referral模型的visits列。現在,如果用戶註冊,將執行users#create,並且我希望能夠在創建操作中使用value,以增加Referral模型中的signup列。

截至目前,我瞭解到我在new行動中創建的實例變量存儲value行爲不能用於create行動。現在我怎麼能做到這一點。

+0

你能告訴我們一個如何使用這個變量的例子嗎?你的問題有點含糊。 –

+0

我已經添加了一個更真實的例子。 – Nikhil

+0

還是,任何指針? – Nikhil

回答

2

一般情況下,實例變量只會持續用戶的HTTP請求,所以它們不能在一個動作中創建並在另一個動作中使用。

您可以嘗試在會話中存儲變量,由new動作生成的HTML表單上的隱藏輸入字段或由new動作生成的鏈接的網址中。

我不確切知道你在做什麼,但是從你的兩個動作的名字來看,這聽起來像可能是一個HTML表單,所以我認爲最好的辦法是使用隱藏的輸入,像這樣:

<input type="hidden" name="model_id" value="<%= @model_id %>" /> 
+0

我同意,如果您只是想傳遞數據...然後發佈。使用上面的隱藏輸入是實現這一目標的好方法。 –

+0

僅當模型具有該列model_id時才能使用隱藏字段,不是嗎? – Nikhil

2

實例變量只能用於該調用,並且在類中定義它們,但視圖除外。如果您擁有兩種方法的控制器,其中一種方法是您的路線,另一種方法是在內部使用的,那麼它將同時適用於兩種方法,它也可用於您的視圖。

例如

test_controller.rb

def index 
    something_else 
    p @variable #outputs "foo" in the terminal 
end 

def something_else 
    @variable = "foo" 
end 

但是它不會是創建和新之間可用,因爲這些會在不同的請求調用。

+0

我現在明白實例變量在下一個請求中被銷燬。我也澄清了這個問題,請你清楚我的疑問。 – Nikhil

相關問題