Railsで最終更新レコードを取得する方法

このQ&Aのポイント
  • Ruby on Rails 4.1.2を使用して、Entryモデルで最後に更新したレコードを取得する方法を教えてください。
  • 具体的には、最終更新日が2014-09-16 20:20となっているid=2のレコードを取得したいです。
  • Entry.find(2)だけではなく、より良い方法があれば教えてください。
回答を見る
  • ベストアンサー

Railsで、最終更新レコードを取得するには?

Ruby on Rails 4.1.2 を学習しています。 [1] pry(main)> Entry.all Entry Load (0.1ms) SELECT "entries".* FROM "entries" +----+--------+--------------+---------------------------+ | id | name | comment | updated_at | +----+--------+--------------+---------------------------+ | 1 | Taro | 楽しみです | 2014-09-16 20:00:00 +0900 | | 2 | Jiro | わくわく | 2014-09-16 20:20:00 +0900 | | 3 | Saburo | 頑張ります | 2014-09-16 20:10:00 +0900 | +----+--------+--------------+---------------------------+ Entryモデル(テーブル)で、最後に更新したレコードを取得するにはどのようにしたら良いでしょうか? 最終更新日が2014-09-16 20:20となっているid=2のレコードを取得したいのです。 Entry.find(2)とすれば、もちろん取得できるのですが、それではあんまりですし。 よい方法を教えて頂けないでしょうか? どうぞよろしくお願いいたします。

  • Ruby
  • 回答数1
  • ありがとう数10

質問者が選んだベストアンサー

  • ベストアンサー
  • ki073
  • ベストアンサー率77% (491/634)
回答No.1

Entry.order(:updated_at).last でできるはずです。 レコードが多くなって遅くなってきたら、updated_atにインデックスを設定してみてください。

Saotome_Haruka
質問者

お礼

早速のご回答、本当にありがとうございます。 無事に最後に更新されたレコードを取得することができました。 もっといろいろ学んで、上達していこうと思います。 とっても助かりました。感謝です。

関連するQ&A

  • Rails 3 での動的更新について

    Ruby on Rails 3 を利用してウェブ開発をしているのですが、Rails 2 の時に利用できた動的更新が出来なくて困っています。 今回の質問の動的更新とは、テキストフィールドなどに入力があるとそれを検知して、コントローラー内の処理を呼び出して結果をページの一部として表示する、というものです。 Rails 2 の時には以下のようにしていました。 <script language="JavaScript"> <!-- function ShowRule() { $("#show_value").load("/[コントローラー名]/[メソッド名]?[パラメーター]="+document.[フォーム名].[ポスト名].value); } //--> </script> 値を返したい部分に <div id="show_value"></div> を置き、入力を監視したい項目に :onclick => "ShowRule()" のオプションをつけていました。 同じように記述したのですが、Rails 3(というか jquery)だと上手く動きません。上記のような処理を jquery で行う方法をご教授ください。 よろしくお願い致します。

  • oracleでテーブルからのデータ抽出

    以下の様なテーブルがあります。 テーブルから姓が同じで、名が一方はNULLで、一方はNULL以外である レコードを全て抽出したいのですが、どのようにすればよいですか。 お願いします。 ■tbl1 ID SEI MEI EMAIL ---- ----------------------- 1 yamada ichiro 2 yamada jiro 3 yamamoto taro 4 sato 5 sasaki taro 6 aoyama 7 akasaka 8 sasaki 9 saito saburo 10 hanada 11 saito 12 hosokawa kuro 13 hanada hanako 14 yamamoto 15 hanada taro 期待する結果 ID SEI MEI EMAIL ---- ----------------------- 3 yamamoto taro 14 yamamoto 5 sasaki taro 8 sasaki 9 saito saburo 11 saito 10 hanada 12 hosokawa kuro 13 hanada hanako 15 hanada taro

  • Ruby on rails のモデルオブジェクト

    Ruby on Rails を勉強しているんですが、細かいところで @member = Member.find(1) という風に作成したモデルオブジェクトについてですが、 @memberとういう変数から、Memberモデルの主キー名を取得することができるでしょうか。 ※または、@memberから、Memberクラスが取得できるか。 @member.reflectionsなど、いろいろためしましたができませんでした。 お分かりの方がいらっしゃいましたら、是非お教え願えないでしょうか。

    • ベストアンサー
    • Ruby
  • Railsによるブログアプリ、記事閲覧ページ内の「前の記事へ|次の記事

    Railsによるブログアプリ、記事閲覧ページ内の「前の記事へ|次の記事へ」の実装 よくあるブログの記事閲覧時(scaffoldで言う所のshowアクション)に下の方にある、 「前の記事へ|次の記事へ」 というリンクの実現につまずいております。。。 users:ユーザー情報のモデル blog_entries:ブログの記事モデル それぞれのテーブルはuser_id、blog_entry_idと言った感じで紐付いています。 どのユーザーが記事を書いても、blog_entryのテーブルのレコードとして格納され、 indexページなどで、ユーザー毎の記事をとり出す時は、以下のようにしています。 @user = User.find(params[:user_id]) @blog_entries = BlogEntry.paginate( :conditions => [ 'user_id = ?', @user ], :page => params[:page], :per_page => 10, :order => "created_at DESC" ) $page_title = "#{@user.name}さんの日記一覧" このような場合、 記事閲覧時の「前の記事へ|次の記事へ」のリンクを実装する場合、 どのようなアイデアがございますでしょうか。 詳細に欠ける質問で大変恐縮ではございますが、 皆さまにお力添えいただければ幸いです。 宜しくお願いいたします!

    • ベストアンサー
    • Ruby
  • Ruby on RailsでDBカラムにハイフン

    初歩的な質問で恐縮です。 Ruby on Rails でDBのカラムにハイフンは使えますでしょうか。 多言語対応で中国語などを扱っているのですが、 カラム名が name_zh-tw のようなものがあるのですが、値が取得できずに困っております。。 例) Items テーブルに name_zh-twがある場合。 @item = Items.find_by_i(1000) @item.name_zh-tw =>NoMethodError: undefined method `name_zh' for #<Item:0xb605f364> のようになってしまいます。。 また、上記以外の箇所でもダブルクォートで囲ったら大丈夫な場合がありますが、ログには警告がでます。これは仕方ないのでしょうか。。 [WARN] Exception occurred during reader method compilation. [WARN] Maybe name_zh-tw is not a valid Ruby identifier? [WARN] compile error ----- 環境は以下の通りです。 何卒よろしくお願いいたします。 Ruby1.8.7 Rails2.3.15 MySQL5.5

    • ベストアンサー
    • Ruby
  • 複数タブで別々のヤフーログインを維持したい

    こんにちは。 IE8を利用しています。 複数のタブにそれぞれ別のヤフーIDでログインした状態を 維持したいのですが可能でしょうか。 具体的には、以下のような感じです。  タブ1→taro@yahoo.co.jpでログイン  タブ2→jiro@yahoo.co.jpでログイン  タブ3→saburo@yahoo.co.jpでログイン タブを複数にしなくてもいいです。IE自体を複数起動させた 状態でも構いません。 お分かりになる方、どうぞよろしくお願いします。

  • HerokuのDBへのinsert方法

    アプリケーションからではなく、ローカルからherokuのDBへのレコードの挿入方法を教えてください。 現在、Ruby on Rails4でherokuへのデプロイが完了した地点まで来ました。 db:migrateでデータベースの構築までできたのですが、レコードの追加方法がわかりません。 マスタテーブルは以降更新する必要が無いのでseedで設定してやれば良いのはわかるのですが、不定期的にレコードを追加したいテーブルでは、どのようにしてレコードを追加/更新すれば良いでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • Ruby
  • VBAでCSV同士のマージ

    先日、CSVの読み込みについて質問させていただきましたが、マージについての質問に変更して改めて質問させてください。 XとYというCSVファイルがあり、Yの内容とXの内容を合わせた結果を新しいシートに貼り付けるVBのコードを作成しています。 XとYの配列にCSVの内容をそのまま入れ、以下のようなマッチング方法でXの配列にYの内容も入れました。 'マッチング If X(0) = Y(0) Then 'IDが一致した場合 For i = 1 To UBound(Y)  'IDを除いたYファイルの終わりまで Index = Index + 1 '列番号追加 ReDim Preserve X(Index) '上記で追加した番号をXの配列に追加 X(Index) = Y(i) '追加した配列にYの要素を入れる Next i End If ここで、新規シートに内容を表示するのですが、ここの結果がどうもおかしくて、Yの内容が反映された行は最後の行のみになってしまいます。 例として X.csv ID,名前 2001,TARO 2002,JIRO 2003,SABURO Y.csv ID,出席 2001,○ 2002,X 2003,○ のようなものがあったとして、マッチング結果が ID,名前 2001,TARO 2002,JIRO 2003,SABURO,○ と言った感じに最後のみ反映されています。 どなたか解決方法ご存知のかたよろしくお願いします。

  • php+MySQLでレコードが何行目かを知るには

    お世話になります。 php+MySQLの環境でレコードが何行目になるかを 知る方法を教えてください。 まず下記のようなテーブルがあるとします。 |  id  |  name  | -------------------- |  1 |  山田  | |  2 |  田中  | |  3 |  中村  | |  5 |  山本  | idはAutoIncrementで振っています。 nameは重複することはありません。 レコードは更新状況により削除されることがあるため、 idは必ずしも連番になっているわけではありません。 このような状況で上のテーブルの「山本」を ORDER BY id ASC で取得する際に「山本は4行目である」 ということがわかる方法を教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • phpとデータベース

    毎回お世話になっております。あの今phpmy-adminで作成したデータベースにphpでつなげました。ユーザがウェブページ上で入力したものを保存してテーブルのそれぞれのレコードを表示させました。そこのページに”削除”というボタンを押すとテーブルからそのレコードだけを消せるようにしたいのですがどのようにすれば良いでしょうか?下のようなものを考えたのですが失敗してテーブルに含まれる全てのレコードを間違って消してしまいました。すみませんがよろしくお願いします。 2つテーブルがあり、entries とcommentsテーブルのフィールドはこのようになっております。 entries entry_id title entry entered_timestamp comments comment_id commentor_name commenter_email comment timestamp <html> <body> <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post"> <?php require_once("connect.php"); $booDelete = 0; $dbRecords = mysql_query("SELECT* FROM entries", $dbLocalhost) or die("Problem reading table: " .mysql_error()); while ($arrRecords = mysql_fetch_row($dbRecords)) { echo "<p>" .$arrRecords[0] ." "; echo $arrRecords[1] . ""; echo $arrRecords[2] . ""; echo $arrRecords[3] ."</p>"; echo "<INPUT type ='submit' value ='Delete' name='submit'>"; } if (isset($_POST["submit"])) { $dbRecordDelete = mysql_query("DELETE FROM entries WHERE entry_id = entry_id", $dbLocalhost); } ?> <form> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう