我是rails的新手,我似乎无法弄清楚为什么我不能按类别名称分组文章。我有一个类别表和一个通过提要加入的文章表。以下是我想要完成的一个例子。
示例:
Sports
article 1
article 2
article 3
Food
article 1
article 2
Music
article 1
article 2
以下是关联:
class Category < ActiveRecord::Base
attr_accessible :name
has_many :feeds
has_many :articles, through: :feeds
end
class Feed < ActiveRecord::Base
attr_accessible :account_id, :name, :source, :url, :category_id
belongs_to :category
has_many :articles
end
class Article < ActiveRecord::Base
attr_accessible :guid, :name, :published_at, :summary, :url, :feed_id
belongs_to :feed
end
在文章控制器中我有这个:
class ArticlesController < ApplicationController
def index
@articles = Article.all
@article_list = @articles.group_by { |t| t.category.name }
end
end
在文章视图中:
<% @article_list.each do |category, article_items| %>
<%= category %>
<% article_items.each do |article_item| %>
<% article_item.name%>
<% end %>
<% end %>
答案 0 :(得分:2)
您需要在Article
和Category
之间建立关联,以便按照您现在定义的group_by
进行操作。您可以使用has_one :through
来解决此问题:
class Category < ActiveRecord::Base
attr_accessible :name
has_many :feeds
has_many :articles, through: :feeds
end
class Feed < ActiveRecord::Base
attr_accessible :account_id, :name, :source, :url, :category_id
belongs_to :category
has_many :articles
end
class Article < ActiveRecord::Base
attr_accessible :guid, :name, :published_at, :summary, :url, :feed_id
belongs_to :feed
has_one :category, :through => :feed
end
获得上述has_one :category, :through => :feed
后,您就可以成功@article.category
,或者更具体地说@article_list = @articles.group_by { |t| t.category.name }
成功。
您还需要更新视图,因为您错过了=
:
<% @article_list.each do |category, article_items| %>
<%= category %>
<% article_items.each do |article_item| %>
<%= article_item.name %> # missing here
<% end %>
<% end %>