Rails学習メモ(初学者向け)
どうも、nus4です。
Rails講座の学習メモ3回目です。
前回投稿より時間が経ってしまいました…
マイペースではありますが、投稿は継続していきますので、今回もよろしくお願いします!
学習方法
- Progate Ruby on Rails5コース
(Ruby学習に引き続き、愛用させてもらってます!)
📝 目次
データベースの値を取得する
# ターミナルコマンド
変数名 = モデル名.find_by(カラム名: 値)
引数部分はカンマを間にいれることで、複数のカラム:値を指定することが可能です。
データベースの中身をビューに表示させる
特定のレコードなど、データベースの中身をビューに表示させたい場合、
URLにカラム値を含めてアクション指示を行うと便利です。
コード例
- routesファイル:カラム値を含めたURL名の場合、どのアクションに飛ぶかを追記
- controllerファイル:アクション内でparams変数を使用してURL内の値を取得する
- htmlファイル(表示用ビュー):アクション内で取得した変数を使用する
# routeファイル
get "~~/:URL変数名" => "コントローラ名#アクション名"
# <---URL--->
上記のように、routesファイルを変更することで、":URL変数名"の部分がどの値でも共通のアクションへ飛ばせるようになります。
逆に、どの値でも合致するため、route内では最下行に追加することを意識しましょう。
(routeは上から順に合致するものを探すため)
# controllerファイル
def アクション名
# 変数値を直接取得
@変数名 = params[:URL変数名]
# カラム内で変数値に合致するレコードを取得する
@変数名 = モデル名.find_by(カラム名: params[:URL変数名])
end
URL内にある変数値はparamsという変数に[URL変数名: 値]という状態で入っているため、取得は上記の書き方になります。
<!-- htmlファイル -->
<%= @変数名 %>
HTMLの入力フォームからデータベースに変更を加える
テキストボックスなどの入力値をデータベースに追加する場合は、
name属性を使用することで実現できます。
コード例
- htmlファイル(入力用ビュー):入力フォームにform_tagで転送先URLを示し、name属性名をつける
- routesファイル:postアクションを追加する
- controllerファイル:アクション内でインスタンスを作成し、保存する
<!-- htmlファイル -->
<%= form_tag("URL") do %>
# 入力フォーム 例)textarea
<textarea name="name属性ハッシュ名">"初期値"</textarea>
# 入力フォーム 例)input
<input name="name属性ハッシュ名" value="初期値">
<% end %>
form_tagとname属性を記入することで、入力値の転送先を正しく指定できます。
form_tagの場合、転送先のアクションはgetではなく、postにルーティングされるので気をつけましょう。
# routesファイル
post "URL" => "コントローラ名#アクション名"
データベースに変更を加える場合は、今までのgetアクションではなく、
postアクションにする必要があります。
書き方は基本的にgetアクションと同じです。
# controllerファイル
def アクション名
# name属性値をカラム値とした、データを作成
@インスタンス名 = モデル名.new(カラム名: params[:name属性ハッシュ名])
# 作成したデータを保存
@インスタンス名.save
# postアクションで対応するビュー(URL)に転送する
redirect_to("/URL")
end
アクション内ではredirect_toを使用することでも、他のURLに転送(リダイレクト)を行うことが可能です。
おまけ データベースを降順に並び替える
orderメソッドでデータベースを並び替えてから表示させることが可能です。
":desc"だと降順で、":asc"だと昇順に並び替わります。
# controllerファイル
def アクション名
@変数名 = モデル名.all.order(カラム名: :desc)
end
変数は配列型になります
いかがでしたでしょうか。
まとめるのに苦戦していまして、改善があれば今後も適宜更新する予定です!