Ruby on Railsでアプリを作ってみよう⑥


それでは実際にデータベースにデータを追加してから取り出してみましょう。
まずコンソール上でrails cコマンドを実行しデータを追加します。

#コンソール
irb(main):001:0> post = Post.new #インスタンス生成
irb(main):002:0> post.comment = "今日はいい天気ですね" #commentカラムにデータ追加
irb(main):003:0> post.save #データ保存
irb(main):007:0> exit

これでデータが生成され保存されました。シークエルプロでみてみましょう。

追加したい時は同様の作業を行います。

ActiveRecordメソッド

モデルがテーブル操作する時に使えるメソッドで
データを取得、作成、保存などができます。

メソッド 使い方
all テーブルのすべてのデータを取得
find テーブルのレコードの内、ある1つのデータを取得
new クラスのインスタンス(レコード)を生成する
save クラスのインスタンス(レコード)を保存する

それでは実際にレコードを取り出してみましょう。

#コンソール
irb(main):001:0> Post.all #全てのデータ取得

このように全てが出力されます。二番目のレコードだけを取得したいときはどうすればいいのでしょうか。

irb(main):001:0> Post.find(2) #2番目のレコードのデータ取得

このようにして取り出します。

またレコードを変数に代入して変数.カラム名で情報を取り出すこともできます。

irb(main):001:0> Post.find(3) #3番目のレコードのデータ取得
irb(main):002:0> post = Post.find(3) #3番目のレコードのデータ取得し変数postに代入
irb(main):003:0> post.comment #3番目のレコードのコメントカラムに入っている内容出力

それでは実際にコントローラーを使って情報を取得してみましょう。

app/controllers/posts_controller.rb
class PostsController < ApplicationController
  def index
    @post = Post.find(3)  # 3番目のレコードを@postに代入
  end
end

インスタンス変数@postにデータを代入したのでビューファイルで取り出したデータを使うことができます

app/views/posts/index.html.erb
<%= "データベースで取得した値を表示" %>
<%= @post %>

http://localhost:3000/posts/ にアクセスすると

このように表示されます。

複数のデータを一つ一つ表示したいときはどうするのでしょうか?
全てのデータを取得してインスタンス変数に代入します。

app/controllers/posts_controller.rb
class PostsController < ApplicationController
  def index
    @posts = Post.all  # 全てのレコードを@postsに代入(複数あるのでインスタンス変数複数形)
  end
end

このままfindメソッドと同じ書き方をしてしまうとエラーが出てしまいます。
全てのデータを一気に表示はできないのです。
こういう時に何を使うのかというと...配列の中の要素を一つ一つ取り出す奴がいましたね。
感の言い方は気づかれたかもしれません。そう!eachメソッドです!(忘れた方は以前の記事をみてください)

app/views/posts/index.html.erb
<%= "データベースで取得した値を表示" %>
<% @posts.each do |post| %>
  <%= post.comment %>
<% end %>

こうすると

このように全てのデータが取得できます。

以上です。