Ruby on Rails学習記録2

モデル

アプリケーションが扱うデータや処理を表現する仕組み

モデルの作成
$rails g model モデル名 カラム名:データ型
$rails g model Post name:text
# 規則:テーブルの作成には単数形、頭文字は大文字。
データベースに(変更を)反映する
$rails db:migrate
# 反映されていない場合、マイグレーションエラーが発生する。
メソッド 詳細 使用例
all 全てを取得
取得内容は、配列。
インデックス番号指定で取得可。
Post.all
Post.all[0]
new インスタンスを作成 Post.new(content:"xxxx")
save 作成したインスタンスをテーブルに保存 post.save
destroy データを削除 post.destroy
モデル内のデータを編集(更新)する。
$rails console
> post = Post.find_by(id:1)
# Postモデルからid:1を取得する。

> post.content = "更新内容"
# 既存contentの内容を上書きする。

> post.save
# データベースへ保存する。
# update_atカラムの時刻が更新される。
【補足】データベース参照コマンド
$rails dbconsole
.table      <- table_info
.header on  <- header_info_on
共通のレイアウト:application.html.erb

ヘッダー、フッターなどをまとめると良い。
<%= yield %>に各HTMLファイルの内容が代入される。

link_toメソッド

タグを作成する。<%= %>で囲む必要あり。
第一引数に表示する文字を、第二引数に URLが代入される。

<%= link_to("ABOUT","/about") %>
<a href="/about">ABOUT</a>
find_byメソッド

ある条件に合致するデータを取得する。

モデル名.find_by(カラム名: 値)
Post.find_by(id:2)
変数params
  • params[:○○]を使ったルーティングのURLから値を取得する。値はハッシュとして入る。
  • name="○○"が付いたフォームの入力内容を受け取る
URL:xxxxx.posts/1
# routing
get "posts/:id"   => "posts#show"

# controller
def show
 @id = params[:id]   <- {id:1} というハッシュが、変数paramsへ入る
end

# view
<% @posts.each do |post| %>
  <%= link_to(post.content, "/posts/#{post.id}") %>
<% end %>
form_tagメソッド

フォームに入力されたデータを指定されたURLに送信することが可能。

form_tag(送信先のURL) do

<input type="submit">のボタンを押した時に、データが送信される。
name属性:html.erbタグにname属性を指定すると、入力データを送信することが可能。
name属性の値をキーとしたハッシュがRailsに送信される。

<%= form_tag("/posts/create") do %>
  <textarea name="content"></textarea>
  <input type="submit" value="投稿">
<% end %>
データを受け取る

name属性を指定したフォームに入力されたデータは、アクション内で受け取ることが可能。
フォームのデータは、変数paramsで受け取る。
paramsはname属性に設定した文字列をキーとしたハッシュになっている。

@post = Post.new(content: params[:content])
# Postモデルのcontentカラムへparams[:content]で受け取った内容をpost変数に代入する。
@post.save
# 受け取った内容を保存する。
redirect_to("/posts/index")
# 受け取った内容をposts/indexへ受け渡す。
orderメソッド

データを並び替える。
order(カラム名: 並び替えの順序)
順序:昇順(:asc)と降順(:desc)

@posts = Post.all.order(created_at: :desc)