简体   繁体   English

Rails控制台与MySQL结果不同

[英]Rails Console Differing MySQL Results

I am having trouble using a LEFT OUTER JOIN with Rails. 我在使用带有Rails的LEFT OUTER JOIN时遇到麻烦。 I think I have my Ruby code down but when I enter it into the rails console I get one result and when I copy the produced MySQL I get another result. 我想我把Ruby代码记下来了,但是当我将它输入到rails console我得到一个结果,而当我复制生成的MySQL时,我得到了另一个结果。 An entire column (value) is missing in the rails console . rails console缺少整个列(值)。 Why is it that the SQL is the exact same but I am getting different results? 为什么SQL完全相同,但是却得到不同的结果? Ideally, I want the results to include the value column. 理想情况下,我希望结果包含value列。 As always any help would be greatly appreciated. 一如既往,任何帮助将不胜感激。

Rails Console Response 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 Response 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 |
+-----------------+-------+

Only the attributes from the SecurityItem class appear in the return result. 返回结果中仅显示SecurityItem类的属性。 However, you can access the attributes from the joined table through the 'attributes' method. 但是,您可以通过'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'] }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM