从具有相同列名的连接表中提取数据后使用符号进行映射



目前,我已经使用join方法连接了多个表,我需要抽出几个列,我需要将它们映射到其他东西。我的意思是:

A.join( ... long sql statements involving model B and C...)
.pluck("A.id", "A.name", "B.id", "B.name" ...) # you get the idea
.map( |result|
# Then to use the various attributes, I was using result[0] to access A.id and so on

我想知道是否有可能将我的属性转换为:A_id:B_name等符号?之所以使用table_name。attribute"是因为表中的列具有相同的名称。如果可能的话,我正在寻找:

A.join( ... long sql statements involving model B and C...)
.pluck(A_id, A_name, B.id, B_name ...) 
.map( |A_id, A_name, B.id, B_name ...| ...)

符号将使它更容易,所以当我映射,我不需要使用索引来访问我的属性?例如,我可以在上面的例子中直接使用:A_id而不是result[0]

将真正有助于可读性,因为我正在挑选相当多的属性和我的连接是相当大的(所以有很多列具有相同的名称),它肯定看起来混乱与result[0]result[10]在我的map函数。

提前感谢!!

.pluck返回一个数组,这对于您的场景来说有点困难,但是selectAS(alias_name)的组合可以解决这个问题。

A.join( ... long sql statements involving model B and C...)
.select("A.id AS AID", "A.name AS ANAME", "B.id AS BID", "B.name AS BNAME" ...)
.each { |result| p result.AID ...}

pluckselect的区别在于,select返回的A对象数组具有select中定义的别名作为属性。

最新更新