1

是否有必要讓Rails識別SQL select語句中的常量?例如,下面的SQL語句是有效的:Rails忽略SQL SELECT語句中的常量

SELECT id, name, 1 AS constant FROM table_name 

而且我希望的結果有三列返回:idnameconstant。在constant列中的值將始終爲1

然而,在Rails的,如果我嘗試做常數列被使用Model.find_by_sql下降同樣的事情:

TableName.find_by_sql("SELECT id, name, 1 AS constant FROM table_name") 

ActiveRecord::Base.connection.execute("SELECT id, name, 1 AS constant FROM table_name") 

這是Rails 4.0中的一個錯誤還是已知的限制,或者如果有另一種方法可以做到這一點,我不想嘗試?

回答

1

是什麼讓你覺得你的constant不存在?從fine manual

的find_by_sql(SQL,結合= [])
[...]
如果你調用一個複雜的SQL查詢跨越多個表由SELECT指定的列會模型的屬性,不管它們是否是相應表格的列。

強調我的。所以如果你這樣說:

a = TableName.find_by_sql("SELECT id, name, 1 AS constant FROM table_name") 

然後你可以說a.first.constant並得到回報。請注意,您可能在控制檯中看到的通常的inspect輸出將不包括constant,因爲AR的inspect只知道表列;你會看到這樣的事情在控制檯:

[#<TableName id: 6, name: "Pancakes">, ...] 

但目的將constant電話與'1'前回覆,;是的,他們可能是字符串,你必須自己整理類型轉換。

+0

謝謝,對於遲到的回覆感到抱歉。我沒有明確地尋找結果中的常數,所以我不知道它在那裏。 – kirley