2017-04-03 65 views
1

我錯過了一些非常簡單的東西,只是不知道是什麼。我在同一個控制器AppProxy中有兩個動作。一個動作,AppProxy#return_credit用於太通過AJAX POST數據,和它的偉大工程:從通過AJAX創建的同一控制器中的操作檢索數據

def return_credit 
    customer = Customer.find_by(email: params["email"]) 
    @credit_amount = customer.credit_amount.to_f 
    render json: @credit_amount, :status => :ok 
end 

上述行動的偉大工程,並返回@credit_amount就好了。但是,當我需要在同一控制器內的其他操作中使用@credit_amount時,提供視圖的AppProxy#credit已經消失,現在爲空。

def credit 
    @credit_amount 
    # if I do puts "#{@credit_amount}" here its empty, 
    # and obviously same in view 
end 

我也試圖把attr_reader :credit_amount在此控制器,但它並不能幫助。

如何在我的credit操作中使用@credit_amount變量?

回答

1

由於credit動作位於不同的控制器中,所以不能以這種方式在兩個控制器之間共享變量。爲此,有Model

更新:

您已經更新的問題,並回答一樣,你不能兩個動作(請求)以這樣的方式之間共享變量。但是,您可以將邏輯分離方法

def set_credit_amount 
    customer = Customer.find_by(email: params["email"]) 
    @credit_amount = customer.credit_amount.to_f 
end 

,並在before_action使用此方法或直接在操作調用,您不能保存變量(data)在一個動作(要求),然後用它另一個。

如果你想兩個動作(請求)之間共享數據,你需要存儲在某個地方,在sessions或NoSQL數據庫一樣Redis的。

+1

嗯,我需要保存它或再次找到..也許我可以使用redis代替.. – ToddT

0

@credit_amount需要重新設置。

如果你再次使用此:

customer = Customer.find_by(email: params["email"]) 
@credit_amount = customer.credit_amount.to_f 

然後@credit_amount將具有相同的值#return_credit。如果這是您想要的值,那麼我會建議您制定一個私人方法,讓您的所有操作都可以訪問。

相關問題