1

我有关注项目的用户。项目有博客文章。

我的目标是汇总用户关注的项目的博客文章并按最新列出。现在,我只能列出一个项目的所有博客文章,然后才能列出下一个项目的博客文章,以此类推。有没有一种简单的方法来修复它,以便它列出所有项目的所有博客文章最近?

用户.rb

has_many :projects
scope :newest, order("created_at desc")

项目.rb

has_many :blogposts, :dependent => :destroy

博文.rb

belongs_to :project
belongs_to :user
scope :newest, order("created_at desc")

users_controller.rb

def show
    @user = User.find_by_permalink(params[:permalink])
    @projectsfollowed = @user.followed_projects.newest.page(params[:projectsfollowed_page]).per_page(10)
end

显示.html.erb

<% @projectsfollowed.each do |project| %>
  <% project.blogposts.newest.each do |blogpost| %>
    <%= render blogpost %>
  <% end %>
<% end %>

更新 我一直在尝试在我的控制器中使用一个数组,但我无法将它与最近的分页一起列出。请看下面:

  blogids = Array.new
  @projectsfollowed.each do |project|
    project.blogposts.each do |blogpost|
      blogids.push(blogpost[:blogpost.id])
    end
  end

  @blog_posts = Blogpost.find(blogids)

更新了 show.html.erb

<% @blog_posts.each do |blogpost| %>
    <%= render blogpost %>
<% end %>
4

3 回答 3

1
@blog_posts BlogPost.where(:project_id => @user.followed_projects.map {|p| p.id})
@blog_posts = @blog_posts.order("created_at desc")
于 2013-07-03T16:40:50.130 回答
1

您可以在用户和博客帖子之间建立“has_many through”关联:

用户.rb

has_many :blogposts, :through => :projects

然后在您的users_controller.rb中简单地执行以下操作:

@blogposts = @user.blogposts.newest

因此,您的视图show.html.erb可能如下所示:

<% @blogposts.each do |blogpost| %>
    <%= render blogpost %>
<% end %>

是有关“has_many through”关联的更多信息。

于 2013-07-03T10:43:05.477 回答
0

非常有帮助的 railscast http://railscasts.com/episodes/87-generating-rss-feeds

只需要为 RSS 提要引入一个单独的视图。

于 2013-07-03T08:20:33.657 回答