2014-01-21 66 views
0

我在使用Rails的LEFT OUTER JOIN時遇到問題。我想我已經關閉了Ruby代碼,但是當我將它輸入到rails console時,我得到了一個結果,當我複製生成的MySQL時,我得到了另一個結果。 rails console中缺少整列(值)。爲什麼SQL是完全相同的,但我得到不同的結果?理想情況下,我希望結果包含值列。一如既往的幫助將不勝感激。Rails控制檯不同的MySQL結果

Rails的控制檯響應

2.0.0-p353 :023 > SecurityItem.joins("LEFT OUTER JOIN security_role_permissions ON security_role_permissions.security_item_id = security_items.id AND security_role_permissions.role_id ='1'").select("security_items.name, security_role_permissions.value") 

SecurityItem Load (0.7ms) SELECT security_items.name, security_role_permissions.value FROM `security_items` LEFT OUTER JOIN security_role_permissions ON security_role_permissions.security_item_id = security_items.id AND security_role_permissions.role_id ='1 

=> #<ActiveRecord::Relation 
[#<SecurityItem id: nil, key: "ChangePassword", name: "Change Password">, 
#<SecurityItem id: nil, key: "AddUsers", name: "Add Users">, 
#<SecurityItem id: nil, key: "UpdateUsers", name: "Update Users">, 
#<SecurityItem id: nil, key: "DeleteUsers", name: "Delete Users">]> 

MySQL的迴應只有

mysql> SELECT security_items.name, security_role_permissions.value FROM `security_items` LEFT OUTER JOIN security_role_permissions ON security_role_permissions.security_item_id = security_items.id AND security_role_permissions.role_id ='1'; 

+-----------------+-------+ 
| name   | value | 
+-----------------+-------+ 
| Change Password |  1 | 
| Add Users  | NULL | 
| Update Users | NULL | 
| Delete Users | NULL | 
+-----------------+-------+ 
+0

爲什麼你甚至不打擾使用ActiveRecord? – coreyward

+0

如何使用Rails直接進行查詢?我認爲首選的方法是使用ActiveRecord? – evanvee

+0

你應該從[docs]開始(http://guides.rubyonrails.org/active_record_querying.html)。你很少需要爲這樣的基本東西編寫SQL查詢。因爲你的命名都是fubar,所以很難說你的模型是什麼樣子的,或者你的意圖是什麼,但是像'SecureItem.where(role:Role.find(1))。all'會更多ActiveRecord-風格的做法。 – coreyward

回答

1

從SecurityItem類的屬性出現在返回結果。但是,您可以通過'attributes'方法訪問連接表中的屬性。

security_items = SecurityItem.joins("LEFT OUTER JOIN security_role_permissions 
ON security_role_permissions.key = security_items.key AND 
security_role_permissions.role_id ='1'").select("security_items.name, 
security_items.key, security_role_permissions.permission") 

security_items.each { |security_item| puts security_item.attributes['permission'] } 
+0

我試過了,它沒有工作。我得到以下'NameError:未定義的局部變量或方法'屬性'爲主:對象' – evanvee

+0

對不起,意外地留下了一部分。嘗試編輯。 – johnsorrentino

+0

有沒有辦法讓它在相同的迴應,如一個查詢,並不需要每個或不可能?這工作,但只是想看看是否沒有更好的方法。 – evanvee

相關問題