1

プロジェクトをフォローしているユーザーがいます。プロジェクトにはブログ投稿があります。

私の目標は、ユーザーがフォローしているプロジェクトに関するブログ投稿を集約し、最新のものからリストすることです。現在、次のプロジェクトのブログ投稿を一覧表示する前に、1 つのプロジェクトのすべてのブログ投稿を一覧表示することしかできません。最新のすべてのプロジェクトによるすべてのブログ投稿を一覧表示するように修正する簡単な方法はありますか?

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 %>
4

3 に答える 3

1

ユーザーとブログ投稿の間に「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 %>

「 has_many through」関連付けの詳細については、次を参照してください。

于 2013-07-03T10:43:05.477 に答える
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 に答える
0

非常に役立つ Railscast http://railscasts.com/episodes/87-generating-rss-feeds

RSS フィード用に別のビューを導入する必要があるだけです。

于 2013-07-03T08:20:33.657 に答える