オリアプ#2

私がイメージしていたメモアプリはrailsでは難しすぎることがわかりました。

なので、メッセージ投稿アプリを、メモにして利用していこうと考えてます。その上で不要な遷移を無くしていきます。

 

例えば、投稿が完了したcreateのviewは必要なく、常にアクティブなものを作りたいと考えています。画面遷移を無くして、そのページだけで解決できるようなアプリをイメージしていました。投稿ボタンがある場所で、一覧表示させて、情報も更新できれば最高なんですが、難しそうなので、とりあえず、追加機能として考えておきます。

 

それはさておき、投稿画面で一覧を表示させたい場合は、複数形の変数を定義して繰り返して取り出す記述をすることで、達成できます。きっと。一覧表示する際に利用していると思うので、それをnewアクションviewに記述すればできます。

 

コントローラーのnewアクションに

def new
@memos = Memo.all
end

と記述します。この記述で@memosの中には全てのメモテーブルの情報が入っています。中身を確認した場合は、@memos = Memo.allの後に適当な文字を入れてエラーを吐かせます。エラー画面のコンソールにて、@memosと記述すると、情報がたくさん出てきます。

こちらをそのまま@memosで表示させようとすると、どの情報を表示したらいいのかわからないと言われ、エラーが発生します。なので下の記述をします。

<% @memos.each do |memo| %>

each doメソッドは、配列の中を1つずつ取り出すメソッドです。
この場合、@memosから、1つの情報を取り出し、memoに代入します。
この繰り返し構文の中にmemo.commentと記述した場合、配列1の中にあるコメントを表示できるようになります。
indexのviewに書く内容なので、そちらを参考にするのをお勧めします。

私の場合、コントローラーに以下の記述をつけています。

.order('created_at DESC')

このメソッドは投稿した順番を入れ替えてくれるメソッドです。最新の投稿が一番上に来るようにしました。これで、投稿したものが上に来てくれます。

 

次に私が考えたのが、そのまま投稿しても、画面遷移させなければそのままメモが投稿されるのでは?と考えました。
しかし、画面が遷移するということが情報の更新を自動でしてくれていることに気づきました。なので、遷移させないのであれば、リロードを手動ですることになります。

それでは不便なので、諦めようと考えていたところ、「同じページに遷移させればいいじゃん」と思いつきました。言語化することで思いついたので、やはり、問題点を言語化して、理解を深めると同時に別の視点の考え方につながるので、言語化するのはいいですね。

早速試してみたところ、同じページに遷移させることでメモ内容を更新できるようになりました。

 
if Memo.create(comment: params[:comment])
redirect_to 新規作成_path
end
 
この記述をすることで保存した時にMVC経由で同じページを開いてくれます。
この調子で、時間がなくて試せなかったことをどんどん試して記録として残していこうと考えています。昔から実験が好きだったので、仮説検証を繰り返せるのが楽しいです。