質問編集履歴

2 質問を追記

tacro

tacro score 17

2018/04/15 08:19  投稿

[Rails 5] フォローしているユーザーの投稿を表示するタイムラインを作りたい
### 前提・実現したいこと
Rails5 で開発をしています。
SNSのタイムラインのようなビューを作りたいのですが、取得した`@posts`配列の並び替えがうまくいかず悩んでいます。
SNSのタイムラインのようなビューを作りたいのですが、取得した`@posts`配列内の要素の並び替えがうまくいかず悩んでいます。
### 発生している問題・エラーメッセージ
フォローしているユーザーの全投稿を格納した配列`@posts`を、新しい順に並び替えたいのですが、うまくいきません。
### 該当のソースコード
`@posts`を`sort_by`メソッドで並べ替えて、全ての投稿を作成された時間順に並べたいのですが、どうしても、ユーザー1の投稿一覧(新しい順)→ユーザー2の投稿一覧(新しい順)→…とユーザーごとに分けられてしまいます。
`concat`メソッドで配列を追加しているので、きちんと一次配列になっているはずだと思うのですが…  
何かアドバイスがあればよろしくお願いいたします。
```Ruby
def following_posts
     @user = User.find(params[:id])
     @users = @user.followings
     @posts = []
     if @users.present?
       @users.each do |user|
         posts = Post.where(user_id: user.id).order(created_at: :desc)
         #取得したユーザーの投稿一覧を@postsに格納
         @posts.concat(posts)
       end
        #@postsを新しい順に並べたい
         @posts.sort_by{|post| post.created_at}
         if @posts.nil?
           flash[:notice]="まだ投稿がありません…"
           redirect_to("/")
         end
     else
       flash[:notice]="誰かをフォローしてみましょう!"
       redirect_to("/")
     end
 end
```
  • Ruby

    10732 questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails

    10107 questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

1 タグを変更

tacro

tacro score 17

2018/04/15 05:35  投稿

[Rails 5] フォローしているユーザーの投稿を表示するタイムラインを作りたい
### 前提・実現したいこと
Rails5 で開発をしています。
SNSのタイムラインのようなビューを作りたいのですが、取得した`@posts`配列の並び替えがうまくいかず悩んでいます。
### 発生している問題・エラーメッセージ
フォローしているユーザーの全投稿を格納した配列`@posts`を、新しい順に並び替えたいのですが、うまくいきません。
### 該当のソースコード
`@posts`を`sort_by`メソッドで並べ替えて、全ての投稿を作成された時間順に並べたいのですが、どうしても、ユーザー1の投稿一覧(新しい順)→ユーザー2の投稿一覧(新しい順)→…とユーザーごとに分けられてしまいます。
何かアドバイスがあればよろしくお願いいたします。
```Ruby
def following_posts
@user = User.find(params[:id])
@users = @user.followings
@posts = []
if @users.present?
@users.each do |user|
posts = Post.where(user_id: user.id).order(created_at: :desc)
#取得したユーザーの投稿一覧を@postsに格納
@posts.concat(posts)
end
#@postsを新しい順に並べたい
@posts.sort_by{|post| post.created_at}
if @posts.nil?
flash[:notice]="まだ投稿がありません…"
redirect_to("/")
end
else
flash[:notice]="誰かをフォローしてみましょう!"
redirect_to("/")
end
end
```
  • Ruby

    10732 questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails

    10107 questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る