首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails存储AR结果中的值

Rails存储AR结果中的值
EN

Stack Overflow用户
提问于 2012-10-26 23:50:04
回答 4查看 772关注 0票数 0

我在控制器中存储查询结果时遇到了一个问题:

代码语言:javascript
复制
payments = Payment.select("SecurityKey").where("VendorTxCode = '%#{params[:VendorTxCode]}%'").limit(1)

payments.each do |payment|
    security_key = payment.SecurityKey
end

后来,当我使用security_key时,我得到一个错误,说它是未定义的。但是,当我在rails console中以如下方式运行它时:

代码语言:javascript
复制
payments.each do |payment|
    puts payment.SecurityKey
end
#=> df4g5ds6

当我的方法不工作时,我如何将这个结果存储在一个变量中供以后使用?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-27 02:55:15

看起来你需要在每个do代码块之前定义你的变量。尝试将密钥存储到数组中,如下所示:

代码语言:javascript
复制
payments = Payment.select("SecurityKey").where("VendorTxCode = '%#
{params[:VendorTxCode]}%'").limit(1)

security_key = []
payments.each do |payment|
    security_key << payment.SecurityKey
end

然后您可以访问密钥,如security_key等。

票数 1
EN

Stack Overflow用户

发布于 2012-10-27 00:00:14

首先,由于您将搜索限制为1,因此实际上不需要使用循环。只需这样做:

代码语言:javascript
复制
security_key = payments.first.SecurityKey

除此之外,您所说的“稍后当我使用security_key时,我得到一个错误,它是未定义的”是什么意思?你在哪里使用它?您是否在该方法中使用它?那么它就应该在那里。它可能不是的唯一原因是,您的查询没有返回任何内容。如果您的查询返回一个空集合,那么该循环将永远不会发生,并且永远不会创建或设置变量。

试试这个:

代码语言:javascript
复制
payments = Payment.select("SecurityKey").where("VendorTxCode = '%#{params[:VendorTxCode]}%'").limit(1)

p payments.first # Will output nil if it's not there

如果您的输出为零,那么您就知道这就是发生的事情。然后,您必须修改您的代码以检查nil,并相应地响应/行为。

票数 0
EN

Stack Overflow用户

发布于 2012-10-27 00:21:41

如果您所说的“稍后”是指从帮助程序或视图访问它,则需要将变量设置为实例变量,而不是本地变量:@security_key

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13090203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档