34335


このような`SQL`を使い`Company`に `belongs_to`である
`Balance`モデルと`Backwardation`モデルの同一日時のものをまとめて取得してるのですが、

[code]

    sql =<<-SQL
     SELECT balances.*, backwardations.rate
     FROM balances LEFT JOIN backwardations
       ON balances.date = backwardations.date AND balances.company_id = backwardations.company_id
     WHERE balances.company_id = #{company_id}
    SQL
    ActiveRecord::Base.connection.select_all(sql).to_hash
    
[/code]

できれば`Hash`ではなく`Balance`モデルに擬似的に`backwardation_rate`カラムを追加した状態で取得したいと思っています。  
`AS`などを使ってそのようなことはできますか？

`Balance.select`文でどうにかならないかも考えましたが、自動的に`FROM "balances"`が最後に来てしまうため無理そうでした。

`Balance`も`Backwardation`も`company_id`と`date`カラムで`unique`制限をつけています。  
DBは`Postgresql`を使用しています。


CC BY-SA 3.0
2017-04-25T11:00:39.087
34272
2017-04-27T22:33:00.663
2017-04-27T21:31:55.253
3271
3271
question
ruby-on-rails sql
特定のモデルに別モデルのカラムを別名で追加する方法


`AS`を使い別名を付けて、`ActiveRecord::Base.connection.select_all`ではなく`Model.find_by_sql`で取得すれば別モデルのカラムを別名で取得することができました。

[code]

    sql =<<-SQL
     SELECT balances.*, backwardations.rate AS backwardations_rate
     FROM balances LEFT JOIN backwardations
       ON balances.date = backwardations.date AND balances.company_id = backwardations.company_id
     WHERE balances.company_id = #{company_id}
    SQL
    balance = Balance.find_by_sql(sql)
    
    balance.backwardations_rate #=> 0.5
    
[/code]


CC BY-SA 3.0
2017-04-27T22:33:00.663
34335
2017-04-27T22:33:00.663
3271
34272
answer