2017-04-03 9 views
1

何かが非常にシンプルで不明です。私は同じコントローラに2つのアクションを持っています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を同じコントローラ内の別のアクションで使用する必要がある場合は、@credit_amountが表示されていて空になりました。

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

as creditアクションが異なるコントローラにある場合、2つのコントローラ間で変数を共有することはできません。この目的のために、Modelがあります。

更新:あなたは質問を更新し、及びこれを答えている

、あなたはこのように二つの動作(要求)間で変数を共有することはできません。あなたは

別の方法に
def set_credit_amount 
    customer = Customer.find_by(email: params["email"]) 
    @credit_amount = customer.credit_amount.to_f 
end 

をロジックを移動して使用すると、1つのアクション(リクエスト)に変数(data)を保存し、その後でそれを使用することはできません、しかし、before_actionにこの方法を使用するか、またはアクションで直接呼び出すことができます別の

2つのアクション(要求)の間でデータを共有する場合は、sessionsまたはRedisのようなNoSQLデータベースにどこかに格納する必要があります。

+1

ええと、私はそれを保存するか、再度それを見つける必要があります..多分私は代わりにredisを使用することができます.. – ToddT

0

@credit_amountを再度設定する必要があります。

あなたは再びこれを使用した場合:

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

を次に@credit_amountは#return_creditと同じ値を持っているでしょう。これがあなたが望む値ならば、私はすべての行動がアクセスできるプライベートメソッドを作ることをお勧めします。

関連する問題