好的,我對這個問題感到非常愚蠢,但這讓我感到非常緊張,我無法弄清楚。文檔說我應該能夠在Rails/ActiveRecord查詢中使用select AS
。所以:ActiveRecord 4無法檢索「選擇AS」字段
d = Dvd.where(id: 1).select("title AS my_title")
是一個有效的查詢,如果我這樣做就可以了to_sql
,它產生預期的SQL:
SELECT title AS my_title FROM `dvd` WHERE `dvd`.`id` = 1
然而,d.my_title
會給出錯誤:
NoMethodError: undefined method `my_title' for #<ActiveRecord::Relation
我需要能夠使用AS
,因爲我想從不同的連接檢索的列具有相同的名稱,所以我不能以「常規」的方式訪問它們,而必須求助於使用AS
。
我也不想訴諸使用find_by_sql
未來的兼容性和從MySQL到PostGresql的可能切換形式。
只是爲了澄清,我真正想要做的是寫SQL的方式Railsy:
SELECT tracks.name AS track_name, artists.name AS artist_name, composers.name AS composer_name, duration
FROM `tracks_cds`
INNER JOIN `tracks` ON `tracks`.`id` = `tracks_cds`.`track_id`
INNER JOIN `artists` ON `artists`.`id` = `tracks_cds`.`artist_id`
INNER JOIN `composers` ON `composers`.`id` = `tracks_cds`.`composer_id`
WHERE cd_id = cd.id
頂部例子只是一個事實是簡化SELECT AS
不會給你一個簡單的方式來引用我覺得很難相信的自定義字段。
不僅你的代碼返回一個錯誤的'結果='(即使你刪除冗餘'execute',試試吧),但這和做'find_by_sql'幾乎是一樣的,我說我寧願不這樣做。 – kakubei