2015-02-12 33 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) 
相關問題