我错过了一些非常简单的事情,只是不确定是什么。我在同一个控制器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
变量?
答案 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中的值相同。如果这是您想要的值,那么我建议您制作一个所有操作都可以访问的私有方法。