2014-12-03 48 views
0

我取從數據庫中的數據,他們有這樣的結構:Rails - 如何將數據庫中的記錄分組/映射到字符串?

@articles = Article.where(...) 

@data

id | author_id | article_name | ... 
1 | 1   | Morning  | ... 
2 | 1   | Wednesday | ... 
3 | 2   | Hallo!  | ... 

當我需要找出多少文章確實有一個作家,我做這種方式:

<% articles = Hash[@articles.group_by(&:author_id).map {|k,v| [k,v.length]}] %> 
<% @data.uniq_by {|x| x["author_id"]}.each do |result| %> 
    <%= articles[result.author_id] %> 

但我也需要同樣地也獲取文章名稱和訪問他們的方式相同的文章計數。 我需要這樣的:

<%= articles2[result.author_id] %> # and this would print out "Morning,Wednesday" for the author with ID 1 

我應該使用哪種方法呢?

回答

1

這應該工作,沒有測試但

<% @articles.group_by(&:author_id).each do |id, articles| %> 
    <%= articles.map(&:article_name).join(",") %> for author with ID: <%= id %> 
<% end %> 
2

您可以通過使用軌關係使整個過程輕鬆了許多:

class Author < ActiveRecord::Base 
    has_many :articles 
end 

然後你就可以通過遍歷所有的作者和搶你想要的信息:

<% @authors.each do |author| %> 

    # number of articles 
    <%= author.articles.count %> 

    # list of article names 
    <%= author.articles.pluck(:name).join(', ') %> 
<% end %> 
+0

是的,我知道,但我需要修改整個表結構,所以這就是爲什麼我需要做就這樣。 – user984621 2014-12-03 12:06:23

+0

@ user984621你爲什麼要改變表格結構?文章表已經有一個author_id列,應該很好去 – Doydle 2014-12-03 12:09:13

+0

這會給出一個'N + 1'的問題。 – Santhosh 2014-12-03 13:04:01

相關問題