【问题标题】:return custom query select in activerecord在活动记录中返回自定义查询选择
【发布时间】:2013-08-26 20:48:53
【问题描述】:

我有一个查询,它执行一些数学运算并返回一个带有结果集的计算自定义选择字段。我无法弄清楚如何在返回的 activerecord 对象中访问它。我也为它添加了一个 attr_accessor。

attr_accessor :percentage_used

select('gateways.*, (num_transactions_today/ SUM(num_transactions_today)) AS percentage_used ').joins(:gateway_groups).where('map_gateway_groups.gateway_group_id = ?', gateway_group_id)

在结果集中,我希望可以访问 :percentage_used,但它不在其中。关于我做错了什么的任何想法?我以前从来不需要这样做。

谢谢

【问题讨论】:

    标签: mysql ruby-on-rails ruby activerecord rails-activerecord


    【解决方案1】:

    你可以访问它

    object["percentage_used"]
    

    【讨论】:

      【解决方案2】:

      你既不需要也不想attr_accessorattr_accessor 创建一个实例变量,一个用于获取该实例变量值的访问器方法,以及一个用于更改其值的 mutator 方法。当你这样说时:

      select('gateways.*, (num_transactions_today/ SUM(num_transactions_today)) AS percentage_used ...
      

      ActiveRecord 会自动为返回的对象添加一个percentage_used 方法。但是用于访问该值的percentage_used 方法将由method_missing 添加。既然你说过attr_accessor :percentage_usedmethod_missing 将永远不会被调用,并且你不能以通常的方式从查询中获取percentage_used 值。

      如果您删除attr_accessor :percentage_used,那么您将能够对该select 返回的对象调用percentage_used,并且您会找到您正在寻找的值。但是,AR 将无法将值转换为原生 Ruby 数字,因此您必须自己 to_f 返回的字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-24
        • 2017-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-19
        相关资源
        最近更新 更多