🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

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

Q&A

解決済

1回答

2106閲覧

Railsで登録順と更新順にしたいです。(order)

hoge_nakatani

総合スコア63

Ruby

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

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

0グッド

0クリップ

投稿2019/11/15 12:38

ありがとうございます。
ただいまweb制作をしておりまして、づまづいております。

やりたいこととしては、記事が投稿されたら、indexアクションで登録順または更新順に並べたいです。

コントローラー

def index @posts = Post.all.order(created_at: :desc) @posts = Post.all.order(updated_at: :desc) @post = Post.search(params[:search]) # 検索機能 end

ビュー

<table border=1> <tr> <th>ID</th> <th>name</th> </tr> <% @posts.each do |p| %> <tr> <td><%= p.id %></td> <td><%= p.name %></td> </tr> <% end %>

表示そのものはエラーなく動作します。
また、検索機能を消せば思う通り(登録、更新順)の動きになります。

色々やったのですが、どうしても今のままでは新しく更新登録された記事が一番したに行ってしまいます。

ご助言よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

検索とかカラムでソートするということですと Ransack というgemがありますので勉強してみると役に立つと思います。

登録 固定でよいということでしたら、とりあえずは
order(created_at: :desc) をwhereに続けていれて下さい。

更新順でしたら updated_at です。

登録、更新順 というのはどういう順なのか仕様を明確に。
登録かつ更新順 はありえないし、登録順にしたら更新順にはならないし、更新順にしたら登録順にはならないし。

投稿2019/11/15 13:21

winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoge_nakatani

2019/11/15 20:41

ありがとうございます! 掲示板でもよくある機能だと思うのですが 例えばスレッドを立てたら、そのスレッドが掲示板のスレ一覧の一番上に表示されて そのスレッドを更新したり、レスがつくと一番上にそのスレが表示されつといった機能が欲しいのです。
winterboum

2019/11/15 21:29

すると order(created_at: :desc) ですね
hoge_nakatani

2019/11/15 22:07

ありがとうございます エラーが出てるのですが、記載方法は以下であっていますか? @posts = Post.search(params[:search]).where.order(created_at: :desc)
winterboum

2019/11/16 00:04

エラーが出た時はエラーメッセージを添えて下さい。エラーメッセージは情報の宝庫です
hoge_nakatani

2019/11/16 01:41

大変失礼しました。 コントローラーは以下の通りです def index @posts = Post.all.order(created_at: :desc) @posts = Post.all.order(updated_at: :desc) @posts = Post.search(params[:search]).where.order(created_at: :desc) # 検索機能 end ビューは以下の通りです <%= form_tag posts_path, :method => 'get' do %> <%# projects_pathはモデル名で読みかえること %> <p class="search"> <%= text_field_tag :search, params[:search] %> <%= submit_tag "名前検索", :name => nil %> </p> <% end %> エラーメッセージは以下の通りです NoMethodError in PostsController#index undefined method `order' for #<ActiveRecord::QueryMethods::WhereChain:0x00007fb1b06c0d40> よろしくお願いします。
winterboum

2019/11/16 08:35

Post.search(params[:search]).where.order(created_at: :desc) ではなく Post.search(params[:search]).order(created_at: :desc) です
hoge_nakatani

2019/11/16 16:10

本当に有難うございます! しかしそうすると問題があります。 それはcreateアクションから投稿した新しい記事がindexの一番最後になるという事です。 やりたいこととしては 投稿されたら記事の一番上 更新されても記事の一番上 に、なので思っている動作と違ってきます。 自分でも考えてみたのですが、どうもどちらの動作もできるようなアルゴリズムを組めませんでした
winterboum

2019/11/16 23:01

A,B,Cの順にpostされたら C,B,A その後Bがこうしんされたら B,C,A にしたいということでしょうか。 ですと Post.search(params[:search]).order(updated_at: :desc) ですね
hoge_nakatani

2019/11/17 11:47

有難うございます!思った通りの動きになりました。 また Post.search(params[:search]).order(updated_at: :desc) こちらですが、日本語で読むと 「Postクラスにsearchメソッドを呼び、searchメソッドのパラメーターを取得してそれをupdate順にする」 で、あってますでしょうか?
winterboum

2019/11/17 12:08

searchメソッドのパラメーターというのが params[:search] のことであるなら、 「 searchメソッドのパラメーターを使って Postクラスにsearchメソッドを呼び」、 ですね。
hoge_nakatani

2019/11/17 13:21

なるほど、有難うございます。 また、ここまでお付き合いいただき本当に有難うございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問