2011-12-03 56 views
1

我在Ruby on Rails 3.1.3中編寫了一個相當複雜的查詢,而且我正在使用find_by_sql。find_by_sql不能在rails上工作3.1.3

但我注意到一個非常奇怪的行爲,即使我用非常簡單的查詢使用find_by_sql。

下面是一個簡單的例子:

讓我們說,我有兩個型號和相關表:

Model 1: Company 
Table 1: companies 
     fields: id, name, address 

     | id | name | address  | 
     +----+------+-----------------+ 
     | 1 | ACME | Bond street, 56 | 

和:

Model 2: Employee 
Table 2: employees 
     fields: id, name, age 

     | id | name | age | 
     +----+------+-----+ 
     | 1 | Fred | 56 | 
     | 2 | Adam | 27 | 

這裏是什麼情況;如果我寫:

Company.find_by_sql("SELECT * FROM `employees`") 

我得到:

Company Load (0.3ms) SELECT * from `employees` 
=> [#<Company id: 1, name: "Fred">, #<Company id: 2, name: "Adam">] 

我只得到員工的名字相匹配的公司(即現場年齡丟失)中的那些領域! 根本沒有@attributes。

這是一個錯誤?誰能幫幫我嗎?

回答

1

控制檯使用漂亮的打印來輸出查詢返回的任何實例的數據。根據與該特定模型關聯的列,漂亮打印在該類中自動實現ActiveRecord,因此不會顯示不屬於該特定模型的屬性。

但這並不意味着屬性沒有加載到實例中。漂亮的印刷只是沒有顯示出來,但他們仍然存在。

所以,如果你只是做:

Company.find_by_sql("SELECT * from employees").first.age 

應該還是根據你的榜樣得到56

1

嘗試:

Employee.find_by_sql("SELECT * FROM `employees`") 
1

如果你從employees表中選擇你要使用的員工的模型。

試試這個

Employee.find_by_sql("SELECT id, name, age FROM `employees`") 
相關問題