我在使用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