2015-02-12 63 views
2

比方说,我有查询其取2种按随机顺序帖子:Rails如何分解成数组ActiveRecord AssociationRelation?

@posts = @customer.posts.where("name ? = OR name ? =", "Google", "Yahoo") 

这将返回我ActiveRecord_AssociationRelation对象与给定的职位名称 我想将它们输出格式为:

output = [ 
    # here just google posts, 
    # here just yahoo posts 
] 

我该如何选择数组内的特定帖子?

Google | Yahoo 
Test | Test yahoo 
Test | Test yahoo 
Test | Test yahoo 
Test | Test yahoo 
Test | Test yahoo 

回答

0

不太清楚你的要求,但如果你要订购的结果,因此,谷歌是雅虎之前,你可以尝试这样的:

@posts = @customer.posts.where(name: ["google", "yahoo"]).order(:name) 

,如果你想转换为可以使用的勇气例如数组

@posts = @customer.posts.where(name: ["google", "yahoo"]).order(:name).pluck([:name,:id]) 

吴国良莱伊 - (在猜测你的问题不是很清楚)

@posts = [ 
    @customer.posts.where(name:"google").pluck([:fields, :you, :want]), 
    @customer.posts.where(name:"yahoo").pluck([:fields, :you, :want]) 
] 

(那么你可以重新因数为助手)

+0

以及如何将结果放入数组中? – user2931706 2015-02-12 08:55:36

+0

以及我如何区分谷歌和雅虎的帖子在最后,因为它返回给我一个名称的数组? – user2931706 2015-02-12 09:23:06

+0

你可以在pluck语句中放入你需要的任何字段, – 2015-02-12 10:24:27

1

这不是很从这个问题不清楚,但是你的代码中使用group_by名字分裂返回岗位。例如:

@posts = @customer.posts.where("name ? = OR name ? =", "Google", "Yahoo").group_by(&:name) 

@posts.each do |name, posts| 
    puts name 
    puts posts.count 
end 

这样回答问题吗?

+0

的问题是不具有查询,我想把里面阵列结果如图所示下面:0的索引填写谷歌帖子,1的索引填写雅虎帖子 – user2931706 2015-02-12 08:58:07

+0

所以我认为group_by应该做的伎俩。您可以遍历结果而不用引用关键字,例如: @ posts.each {| _,posts |把帖子} – JMacLeod 2015-02-12 09:02:59

+0

不,你还没有得到的观点 – user2931706 2015-02-12 09:20:33

0

你可以只按名称排序的结果:

@posts = @customer.posts.where("name ? = OR name ? =", "Google", "Yahoo").order(name: :asc)