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)