【问题标题】:ActiveRecord deep nested query and computed columnActiveRecord 深度嵌套查询和计算列
【发布时间】:2015-01-30 10:30:20
【问题描述】:

这里是关联,

Publication : has_many exchange_ratesbooksauthors

Bookbelongs_to author, exchange_rate

Authorbelongs_to exchange_rate

我正在尝试编写一个查询来查找 books 和一个额外的 computed_column

这是我目前尝试过的查询,

publication.books.joins(:exchange_rate, :author).select("books.*, (exchange_rates.exchange_ratio + (SELECT exchange_rates.exchange_ratio FROM exchange_rates WHERE exchange_rate_id = authors.exchange_rate_id)) AS computed_column")

我的目标是生成一个从关联表属性计算的列。

也就是说,

book.exchange_rate.exchange_ratio + book.author.exchange_rate.exchange_ration AS computed_column

【问题讨论】:

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


    【解决方案1】:

    Book 上添加computed_column 作为attr_accessor

    class Book
      attr_accessor :computed_column
    end
    

    那么您查询中Book 的每个实例都将有book.computed_column 可用

    供参考:Access SQL computed columns through ActiveRecord

    【讨论】:

    • computed_column 只是一个包含计算值的虚拟列。这里不需要attr_accessor
    • attr_accessor 的原因是 Rails 在 SQL 查询中检索到 computed_column 时知道如何处理它。如果您的模型没有使用该名称设置列或访问器,Rails 将丢弃该列
    • 我们没有获取包含计算值的虚拟列。不需要attr_accessor
    • 不幸的是,我不明白你的问题的性质。我以为那是你想做的。您介意更详细地解释一下吗?
    • 我想获取 db 列和 1 个额外的具有计算值的列。类似于sum of two column
    猜你喜欢
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多