我在使用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 |
+-----------------+-------+
爲什麼你甚至不打擾使用ActiveRecord? – coreyward
如何使用Rails直接進行查詢?我認爲首選的方法是使用ActiveRecord? – evanvee
你應該從[docs]開始(http://guides.rubyonrails.org/active_record_querying.html)。你很少需要爲這樣的基本東西編寫SQL查詢。因爲你的命名都是fubar,所以很難說你的模型是什麼樣子的,或者你的意圖是什麼,但是像'SecureItem.where(role:Role.find(1))。all'會更多ActiveRecord-風格的做法。 – coreyward