あしあと

明日の自分への情報発信

Railsの学習(2日目)

今日も頑張ろう

 

自動生成されるidカラム

idカラムはデータベースにデータが保存されるときに自動で入れられる。

f:id:keropp1234:20200117070704g:plain

created_atカラムとupdated_atカラムも、データベースに保存された時刻が自動で入るようになっている。
updated_atは名前のとおりデータ更新した時にも時刻が更新される。つまりcontentカラム以外自動挿入である。

f:id:keropp1234:20200117070823g:plain

 

find_byメソッド〜データベースから特定のidのデータを取得する。〜

特定のidを取得するには「find_by」を使う。

名前のように「〜から見つけてくる」という意味になるので、図のように、「モデル名.find_by(カラム名: 値)」と見つけてくる場所を指定してあげることで、その値を持ったデータをデータベースから取得することができる。

f:id:keropp1234:20200117071537p:plain

 

投稿詳細ページを作る

ルーティングのURL部分に「:」を用いて「posts/:id」と指定することで、「/posts/1」でも「/posts/2」でもshowアクションにいくようにすることができる。
「posts/:id」と書くと「/posts/◯◯」のような全てのURLが該当する。

こうすることで同じようなコードの繰り返しをせずに済むようになる。

f:id:keropp1234:20200117180848p:plain

 

「posts/:id」というルーティングは「posts/index」より下に書かなければいけない。
ルーティングは合致するURLを上から順に探すため、「posts/index」よりも上に書くと、「posts/:id」が、「localhost:3000/posts/index」という「posts/index」と合致させるためのアクションと合致してしまう。

f:id:keropp1234:20200117181125p:plain

 

controllerのaction内ではrootingで設定したURLと:idの値を取得することができるが、その値はparamsという変数にハッシュとして入っている。(1を設定したら1が取得できるということ?)
そのため、params[:id]とすることで、その値を取得することができる。アクションファイル内設定したファイルをviewファイルでは使うことができないので、「@」付けてviewファイルに渡してあげるのを忘れないように。

f:id:keropp1234:20200117182048p:plain

 

showアクションで変数@postを定義し、idカラムの値がparams[:id]と等しい投稿をデータベースから取得して代入します(つまり下の画像で言えば id: params[:id])がそれである。テーブルのidはURLのidと同じということになる。)
@postをshow.html.erbで表示することで、各URLに対応した投稿のデータが表示されるようにしましょう!

f:id:keropp1234:20200117184713p:plain

 

詳細ページへのリンクを作成する。

f:id:keropp1234:20200117193654p:plain

 

入力フォームの作成

HTMLのコマンドである<textarea>タグや<input>タグを用いることで入力フォームを作成することができる。
送信ボタンにはtype="submit"と、value="投稿"を指定する。

f:id:keropp1234:20200117194656p:plain

 

投稿を保存する。

投稿データを保存するにはcreateアクション用意することでデータベースに保存できる。下の画像で言えばpostsデータを保存する場所をcreateしろと命令してるイメージだろうか。

f:id:keropp1234:20200117194944p:plain

 

createアクションのrooting

これまでアクションを作成するときは「get」を用いてきたが、投稿のアクションを作るには「post」を用意する必要がある。これはクラス名のPostには一切関係ない。「そういうもの」、である。

f:id:keropp1234:20200117195131p:plain

 

フォームの申請先を指定する。

「form_tag」を用いることでフォームに入力されたデータを保存することができる。form_tagは、「form_tag(送信先のURL) do」のように送信先のURLを指定する。

これにより、投稿ボタンを押すことで指定されたURL(この画像では/posts/create)にデータが保存される。

f:id:keropp1234:20200117195426p:plain

 

createアクションではビューを用意する代わりに、リダイレクトという、他のURLに転送する機能を用いる。

f:id:keropp1234:20200117204329p:plain

 

リダイレクトを実行するには「redirect_to("URL")」コマンドが必要になる。これにより指定したURLに転送することができる。

f:id:keropp1234:20200117204315p:plain


しかしこの状態ではリダイレクトはしていても、データベースへの保存はできていない。そこで、<textarea>タグにname属性を指定すると、入力データを送信することができるようになり、name属性の値をキーとしたハッシュがRails側に送られるようになる。

f:id:keropp1234:20200117204753p:plain

 

以下の図のように、Postインスタンスを作成する際にparams[:content]を用いる。そのPostインスタンスを保存することで投稿機能が完成する。

f:id:keropp1234:20200117223417p:plain

 

orderメソッド

orderメソッドを用いることで、投稿一覧を並び替えることができる
order(カラム名: 並び替えの順序)のように使います。並び替えの順序には、昇順(:asc)と降順(:desc)のどちらかを指定できる。
created_atを基準に降順(:desc)に並べ替えると、新しいものから順番に表示するようになる。この辺りはSQLと似ている。

f:id:keropp1234:20200117223912p:plain