如何创建新闻源(Rails)?

时间:2013-07-03 08:06:51

标签: ruby-on-rails

我有跟踪项目的用户。项目有博客文章。

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

user.rb

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

project.rb

has_many :blogposts, :dependent => :destroy

blogpost.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

show.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 %>

3 个答案:

答案 0 :(得分:1)

您可以在用户和Blogposts之间建立“has_many through”关联:

<强> user.rb

has_many :blogposts, :through => :projects

然后在 users_controller.rb 中执行以下操作:

@blogposts = @user.blogposts.newest

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

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

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

答案 1 :(得分:1)

@blog_posts BlogPost.where(:project_id => @user.followed_projects.map {|p| p.id})
@blog_posts = @blog_posts.order("created_at desc")

答案 2 :(得分:0)

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

只需要为rss feed引入单独的视图。