我在控制器中存储查询结果时遇到了一个问题:
payments = Payment.select("SecurityKey").where("VendorTxCode = '%#{params[:VendorTxCode]}%'").limit(1)
payments.each do |payment|
security_key = payment.SecurityKey
end后来,当我使用security_key时,我得到一个错误,说它是未定义的。但是,当我在rails console中以如下方式运行它时:
payments.each do |payment|
puts payment.SecurityKey
end
#=> df4g5ds6当我的方法不工作时,我如何将这个结果存储在一个变量中供以后使用?
发布于 2012-10-27 02:55:15
看起来你需要在每个do代码块之前定义你的变量。尝试将密钥存储到数组中,如下所示:
payments = Payment.select("SecurityKey").where("VendorTxCode = '%#
{params[:VendorTxCode]}%'").limit(1)
security_key = []
payments.each do |payment|
security_key << payment.SecurityKey
end然后您可以访问密钥,如security_key等。
发布于 2012-10-27 00:00:14
首先,由于您将搜索限制为1,因此实际上不需要使用循环。只需这样做:
security_key = payments.first.SecurityKey除此之外,您所说的“稍后当我使用security_key时,我得到一个错误,它是未定义的”是什么意思?你在哪里使用它?您是否在该方法中使用它?那么它就应该在那里。它可能不是的唯一原因是,您的查询没有返回任何内容。如果您的查询返回一个空集合,那么该循环将永远不会发生,并且永远不会创建或设置变量。
试试这个:
payments = Payment.select("SecurityKey").where("VendorTxCode = '%#{params[:VendorTxCode]}%'").limit(1)
p payments.first # Will output nil if it's not there如果您的输出为零,那么您就知道这就是发生的事情。然后,您必须修改您的代码以检查nil,并相应地响应/行为。
发布于 2012-10-27 00:21:41
如果您所说的“稍后”是指从帮助程序或视图访问它,则需要将变量设置为实例变量,而不是本地变量:@security_key。
https://stackoverflow.com/questions/13090203
复制相似问题