目前,我已经使用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
返回一个数组,这对于您的场景来说有点困难,但是select
和AS
(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 ...}
pluck
和select
的区别在于,select
返回的A
对象数组具有select
中定义的别名作为属性。