【问题标题】:How to access Mysql::Result in ActiveRecord?如何在 ActiveRecord 中访问 Mysql::Result?
【发布时间】:2010-09-07 10:56:51
【问题描述】:

例子:

result = ActiveRecord::Base.connection.execute("select 'ABC'")

如何从result 获取'ABC' 值?尝试result.first 没有成功。谢谢

附言宝石:

活动记录 (2.3.9)
mysql (2.8.1)

【问题讨论】:

    标签: mysql ruby-on-rails activerecord


    【解决方案1】:

    你可以在 cosole 上试试:

    脚本/控制台#rails 2 rails 控制台 # rails 3

    在控制台输入你的代码,你会得到:

    irb> result = ActiveRecord::Base.connection.execute("select 'ABC'") => [{0=>"ABC", "'ABC'"=>"ABC"}]

    所以你得到它与

    result.first[0]
    # or
    result.first['ABC']
    

    result.first 只返回第一行,而不是第一个值。此行由具有数字和命名访问权限的 Hash 组成。

    【讨论】:

    • 感谢 jigfox。对于结果[{0=>"ABC", "'ABC'"=>"ABC"}],为什么有 2 个“ABC”?还有,0 和第一个"'ABC'" 是什么意思?其中之一是列名吗?当我在 MySQL 查询浏览器中进行查询时,列名是ABC,第一行的值是ABC
    • 结果是#<Mysql::Result:0x102f5e0d0>,而不是[{0=>"ABC", "'ABC'"=>"ABC"}]。什么给了?
    • "为什么有 2 个 "ABC"?以及,0 和第一个 "'ABC'" 是什么意思?" 一个可以通过列号访问" 1”,其中一个可通过列名“ABC”访问。
    • 至于你的 mysql 结果:没关系,你应该仍然能够像在哈希数组中一样访问你的值。
    • @ohho - 遇到同样的问题/问题。我们使用的是旧版本的 Ruby/Rails 和 MySQL。在脚本/控制台中将其更改为 ActiveRecord::Base.connection.select_one("select 'ABC'") 并返回一些明智的...
    【解决方案2】:

    您可以使用.select_all 而不是.execute,这将返回一个包含结果的数组。

    所以使用:

    ActiveRecord::Base.connection.select_all("select 'ABC'")
    

    【讨论】:

    • 这会返回一个 ActiveRecord::Result。
    【解决方案3】:

    试试:

    result = ActiveRecord::Base.connection.select_value("select 'ABC'")
    

    如果你不需要的话,我不建议你搞乱底层数据库代码。

    【讨论】:

    • 谢谢沙德威尔。我将答案归功于 jigfox,因为我正在从 MySQL 查询中寻找一般返回结构,而不仅限于一个值。 useful 为您服务 ;-)
    • 拥有 500k+ 条记录,由于速度的原因,您真的无法选择全部。这通常也是人们倾向于使用 connection.execute 的原因,以便他们可以优化正在处理的 SQL。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多