从通过AJAX

时间:2017-04-03 15:44:05

标签: jquery ruby-on-rails ruby ajax

我错过了一些非常简单的事情,只是不确定是什么。我在同一个控制器AppProxy中有两个动作。一个动作AppProxy#return_credit也通过AJAX用于POST数据,效果很好:

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时,@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_amount操作中使用credit变量?

2 个答案:

答案 0 :(得分: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 :(得分:0)

需要再次设置@credit_amount。

如果你再次使用它:

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

然后@credit_amount将与#return_credit中的值相同。如果这是您想要的值,那么我建议您制作一个所有操作都可以访问的私有方法。