とまとの成長日記

ぴよぴよエンジニアの日々学んだとこを投稿。時々、ゆるーくすきなもの・趣味について語ってます。

renderとredirect_toの違い

今日は割と頭がさえているのでいつもより多少ましな説明ができそうと意気込んでおります💪
私は、毎回のようにrenderとredirect_toを間違えるので
アウトプットしつつ整理していきたいと思います!
基礎中の基礎なのに未だに理解が浅いので間違い等あればご指摘お願いいたします。
※間違いがあるため修正(2019/07/17)

renderとは

よく"レンダーする"とエンジニアの方々はおっしゃっております。
一覧画面や新規登録画面を表示する場合に使われる。

例えば
トップページからユーザーの一覧画面を表示する時
f:id:toomeeto:20190706024933j:plain



コントローラーからビューに行くのがすっとなんの障壁もなしにいってますよね!
これが render になります。

redirect_to

よく"リダイレクトする"とエンジニアの方々はおっしゃっております。
何かの登録とかの処理をしたあとに、一覧画面に遷移する場合に使われる。

例えば、ユーザー登録画面からユーザー登録後とユーザー一覧画面に戻る時
f:id:toomeeto:20190706191615j:plain

コントローラーからビューに行く時に
もう一回コントローラーを通っているのが redirect_to になります!

一度、保存の処理が終わったあと、
ridirect_to でusers#indexアクションに飛ぶように指示されいるので
コントローラーに行きます!
その後、はじめて、index.html.erbを使ってHTMLが生成されて、
ブラウザの画面が出ます!

うーん、遠回りですね!笑



盛大に間違えてたので修正しました!笑
下は無視してください!!
コントローラーからビューに行く時にDatabaseに寄り道してますよね!
これは、データベースで一度ユーザー情報の保存処理をしています。
その後、redirect_to でビューに戻っています!
これが rediret_to になります。

注意してほしいのがDatabaseへの寄り道もredirect_to でビューに戻るもコードを書いている場所は、コントローラーです!
間違っても、モデルとかに書かないでください!笑

問題

ユーザーの編集画面からユーザー情報編集後、ユーザー一覧に移行する場合、
これは、render でしょうか? redirect_to でしょうか?


正解は。。。
redirect_to です!!

一度Detabaseに編集後のユーザー情報の保存処理をしに行くので redirect_toを使います!


はい、今日はこんな感じでおわり〜。
図まで使って張り切って頑張ってみました!!
これで間違ってたらさすがに恥ずかしい!笑
でも、ご指摘お待ちしております!笑

ちなみにこの図を作ったツールは参考に貼っておきます!
フローチャート作ったり、こういうのも簡単にできて、しかも無料!!便利な世の中じゃ。
もっといいツールあるよ~とご存知の方教えていただける嬉しいです!!

www.draw.io

感想

今日は図をdraw.ioで頑張ってみました😤!ドヤ
普通の人なら30分足らずで書き上げるのをあーでもないこーでもないして、2時間以上かかりました🤣🤣
ほんと、自分の言葉でしかも図に落とし込む難しさを感じました。
いつも、教えていただけるメンターの方には頭が上がりません。
そして、教えていただける環境に感謝しつつ就寝💤
皆さん、雨模様ですが、良い週末になりますように😊✨

gem ransack 使ってみた

railsには便利なgemがたくさんあってransack(ランサック)もその中の一つです。
gem ransack はrails用の検索機能です。
結構簡単に実装できます!
初心者でもできちゃったので一緒にやっていきましょう!
今回は掲示板の一覧のページで掲示板のタイトルから検索するようにします。

※distinct: trueに関して誤りがあるかもなので確認中です。
→内容少し変更しました!
→更に追記しました!(2019/07/10)

Gemfileに追加
gem 'ransack'

インストールします

bundle install
Controllerに追加
def index
  @q = Board.ransack(params[:q])
  @boards = @q.result(distinct: true)
end

def search
    @q = Board.ransack(params[:q])
    @boards = @q.result(distinct: true)
  end

今回は掲示板一覧画面に検索フォームをつけるのでindexと
検索結果を示すsearchアクションを定義します。

@q = 検索したいモデル名.ransack(params[:q])
@モデル名s = @q.result(distinct: true)

この2つをそれぞれに定義しましょう!
distinct: true は、
例えば、検索するものが掲示板タイトルと、掲示板コメントから探してくるとします。
とまとという内容のワードが同じ掲示板タイトルと、掲示板コメントにあった場合、重複して結果を表示してしまいます。
重複を避けるために使うのが、distinct: true になります!

↑の説明は、ずれているので無視してください。
ざっくりとした認識で distinct: true は、重複したデータを除外したものになります!
詳しくはこちらを参考にしていただければと思います!
重複したデータを除外してデータを取得する(DISTINCT) | MySQLの使い方

追記
例えば、画像にコメントができるようになっていたとします。(画像対コメントが1対多になっていたとする)
この時、コメントを検索する時に画像が一覧で表示されるようになっていたとします。
同じ画像に同じワードを使ったコメントがあった場合、distinct: true がない場合同じ画像が2つ表示されてしまいます。
distinct: true を使っていれば、重複を削除しているので画像は1つのみの表示になります!
※最初の説明との違いは、テーブル設計を無視した説明になっているので誤りです。

f:id:toomeeto:20190710145432j:plain
検索前イメージ

f:id:toomeeto:20190710145435j:plain
検索後イメージ

Routesに追加
get 'search', to: 'boards#search'

これで検索結果を表示するルーティングの設定は完了です!
これは、さっき作った、searchアクションをルーティングに作っています。

Viewに追加

まずは掲示板一覧に検索フォームを追加しましょう。

<%= search_form_for @q, url:search_path do |f| %>
   <%= f.text_field :title_cont %>
   <%= f.submit '検索' %>
<% end %>

ざっくり解説するとこんな感じ
search_form_for のあとの引数に @q, url:ルーティング

OO_contで検索したい内容をOOに入れる。
もし、検索したいものが複数あれば、
OO_cont_or_OO_cont

また、OO_contはOOを含むという意味で
OO_eqでOOと全く同じという検索方法もあります。
公式にいろんな検索条件の指定方法が載っているので気になる人は見てください!



なんと!!これで検索機能ができちゃいます!!!
正直仕組み的なのはわかってないところが多いですが、
でも動くので良しとしましょう。笑

追記
現役エンジニアの方のお話によると…
ransackはフロントサイドとサーバーサイドが密接に関わってしまうので、より高度なコードを書く場合は避けて使うこともあるそうです!
どのgemを選択するかというのはエンジニアの様々な考え方があるので面白いですね😆

参考資料
github.com

qiita.com

感想

意外と簡単に検索機能が作れたのでちょっとテンション上がりました🤩🤩
そして、眠気に負ける日々が続いて甘えが出ております。
土日は昼から活動して、ちゃんとその日中には出せるようにがんばるぞー!

たくさんのファイル 改

私は、はじめてRailsを触った時に
なんでこんなにたくさんファイルがあるのー!と驚いたので、
改めて一つ一つがどんな役割をしているのか、私の認識をざっと書いていこうかと思います!
正直、全然わからないファイルもあるのでそこは飛ばします!笑
※追記しています。(2019/07/04)

毎度のことですが誤りなどあればご指摘、ご指導お願いいたします。
このファイルはこういう動きだよとか教えていただけると大変嬉しいです!!!!

私が以前作ったアプリがそのままあるのでその中を見ていきたいと思います。
とにかくたくさんのファイルがあるのがわかると思います!
f:id:toomeeto:20190703004844p:plain

tomeetoアプリの中身

1.app
→conntroller、viewなどがあって一番使うファイル

2.bin
触ったことない!飛ばし!
 アプリケーションを起動・アップデート・デプロイするためのRailsスクリプトファイルを置いておく場所だそうです。
 スクリプトというのは簡易的なプログラムといった意味なので、
 多分、アプリケーションを起動・アップデート・デプロイするために必要なコードが書いてあって、
 人間側で行う操作を簡単にしてくれてるイメージかな?

3.config
→このアプリにおける様々な環境設定をしているファイルがたくさんある。
 例えば、ルーティングの設定や、データベースの設定など
 ここの設定を変えたりすると必ずサーバー再起動が必要になる!

4.db
データベース関連のファイルです。
 現時点のデータベーススキーマと、データベースマイグレーションファイルを置く場所だそうです。
 そもそもマイグレーションファイルというのが、モデルを作る時に使うコマンドをRubyが解釈できる状態で保存しておくファイル

5.lib
触ったことない!飛ばし!
 アプリケーションで使う拡張モジュールを置く場所。
 拡張モジュールとは、ある一連の振る舞いの設計図を1箇所にまとめておくことができるもの
 クラスみたいにオブジェクトは生成できない。
 
6.log
→アプリを起動させているときのターミナルで見れるlogを保存しておく場所。

7.public
→このフォルダの下にあるファイルは外部 (インターネット) からそのまま参照できます。
 投稿した画像ファイルとかを保存する場所に使う事が多い。

8.test
使ったことあるけど、よくわかってないから飛ばし!
 ミニテストというRuby標準のテストがあって、それに関するファイルを置いておく場所。
 よくチュートリアルとかで使うやつ。

9.tmp
触ったことない!飛ばし!
 キャッシュ、pidなどの一時ファイルを置く場所。
 キャッシュというのは、データを一時的に保存することで、データの処理速度を速める考え方、仕組みのこと。
 pidは、プロセスに割り振られた管理用の番号。
この説明がわかりやすい→
https://wa3.i-3-i.info/word11040.html


10.vendor
→直接は触ることないが、ダウンロード系をなんかいい感じにしてくれるやつ。
 ようはよくわかってないやつ…飛ばし!

11.その他ファイル
→結構大事なファイルがたくさんいる。わかるのだけ取り上げます!
 ・.gitignore →Gitのファイル管理から除外したいデータなどを保存しておく場所。ex)セキュリティ上知られたくないものを置く場所
 ・Gemfile →ここでたくさんのGemを管理します。
 ・README.md → このアプリの仕様等を書き込む場所です。

ざっと見て行きましたが、
使ってないファイルが沢山あって、ちょっと自分でも改めて驚愕。
基本的に使ってるのappファイルディレクトリしかないじゃん。

ということでappファイルディレクトリの中身を見ていきます。

appファイルの中身

1.assets
この中にはアプリの装飾をしてくれるのが入っているイメージです。
色を付けてくれたり、画像を貼り付けてくれたり、画面のボタンに動きをつけてくれるもののコードを書く場所です。

2.chanels
全く触ったことない…飛ばし!

3.controller
ここがアプリの司令塔みたいな感じです。
どういう流れでアプリが動くのかを指示していきます。

def new
    @user = User.new
  end

この例だと、ざっくりと説明になりますが、
newアクションでユーザーを作ってくださいということになります。

4.helper
viewのちょっとした補助の役割をしているイメージです。
正直まだあまり理解ができてないです…
viewをスッキリさせたい時に大活躍するそうです。

5.jobs
触ったことなし!飛ばし!

6.mailers
そのままの意味で、メールを飛ばすことができます。

7.models
データベースに保存したいデータに関することを書く場所です。
例えば、ユーザー情報は、必ず、emailやpasswordが必要といったことを書きます。

8.view
私達が普段目にしているwebの画面の大元の場所になります。
ここにこのボタンにはこの文字を表示させるとか、どの順番で表示させるとか
そういった役割があります。




はい。ざっくりですが、こんなイメージです。
知識不足が大変露呈しておりますが、こんな浅い知識でも動いちゃうRubyって優秀!すごい!
と褒め称え、今日はこの辺でおやすみします。
ああ、明日も頑張ろ。

参考資料
railsguides.jp

わたしのGit

はい、どうも、まだ1週間のくせしてちょっとサボり気味なのでちゃんと書きますよ!
眠気との戦いの中で書いているので誤りなどあれば、ご指摘お願いします。
もちろん、内容の訂正もお願いいたします!!!

Gitってなにー?

大きく3つの観点からざっくり説明すると

1.バージョン管理システムです
2.複数人で共有できちゃう
3.みんなでがんばろうぜ!

いつもとおりのざっくりさなのでもう少し解説していきます。

1.バージョン管理システムの役割

まず、プログラミングはバージョンを管理するのが当たり前という前提でこのGitは使われています。

なんでバージョン管理をする必要があるのかというのは

そのアプリに必要な機能をどんどん追加していくためにコードを書いていくのですが、

エラー出まくってもう面倒だから一旦元の状態に戻したいなー
とか
間違ってローカルのデータファイル消してしまったあああああああ
とか
やっぱこの機能いらね
とか

何かしらの理由で過去にタイムスリップしたいときが出てくるんです。(体験談)
そんな時、Gitはちょー便利。
コメントとともにデータファイルをそれぞれ保存しておくことができます。

なんて便利なんだ。

2.複数人で共有

アプリケーション開発の規模が大きくなればなるほどGitは重要な役割を果たします。

例えば、3人で開発をしていたとします。

Aさんが掲示板のコメント機能を作って
Bさんが掲示板の画像投稿の機能を作って
Cさんがデザインを設計していたとします。

そうすると別々のPCで作っているのにまとめてがっちゃんこできます!
すると作業効率があがります!

また、間違って自分の範囲外のところを触ってしまっても
ここは他の人もやってますよー!っていう(コンフリクト)
を教えてくれる便利な機能もついています。

また、Gitを公開していると世界中からアクセスできるので
色んな人からコメントをいただけちゃうかも!??

いやーすばらしい!

3.みんなでがんばろう!

これは、レビューのコメント機能です。

コードにコメントを書き込むことで

修正箇所を指摘したり、
この書き方きれい!と称え合ったり、
こんな機能つくりましたと報告したりと

様々なコミュニケーションができます!

これは、複数人で開発しているとどうしてもすれ違いが起きてしまいがちなので
コードに関しての情報を共有する大切な役割です。

PCはなんにも答えてくれないけど、
PCのむこうには生身の人間がいるっていうのを忘れてはいけないですよー!

ではでは長くなりましたが、実際にGitを使っていこう!

はじめてのGit

大前提として、Gitのアカウントを持っていることが前提で、なおかつGitをインストールしているようお願いいたします。


基本は
Add(アド)
Commit(コミット)
Push(プッシュ)

です!

これじゃわからないですよね。笑

では、早速やっていきましょう。
1.Gitのアカウントでリポジトリを作る

2.ローカル(自分のPC内)にてリポジトリを作る

 $ git init 

3.ローカルリポジトリにコードを変更したファイルを追加する
これで変更のあった全部のファイルが追加されます

 $ git add -A

4.ローカルリポジトリに追加したファイルを登録します。
コメントのところには変更内容などを書く

$ git commit -m "コメント"

5.登録したファイルをGithubに作成

$ git remote add origin リポジトリのURL

6.ローカルリポジトリのファイルをGithubに登録する

$ git push origin master

これで初回の登録は完了です!

それ以降は

$ git add -A

$ git commit -m "コメント"

$ git push origin master


でバージョンを管理できます!
ちょー簡素ですが、図にまとめてみました!
f:id:toomeeto:20190702143959j:plain

他にもコマンドはたくさんあるので私が実際使ってみて便利だったー!っていうコマンドなどは
タイミングあれば紹介したいです♪

初心者の人はGitにプッシュするのためらいがちですが
一度慣れちゃえば、他の人に教えてほしい時とかにGitを見せるだけでアドバイスもらえるので
すっごくおすすめです!

最初は失敗だらけなので一緒にたくさん失敗しましょう!笑

参考記事
qiita.com

qiita.com

感想

こんだけの内容なのに思いの外時間かかった。。。
そして、去った日曜に東京で仲良くしていただいているエンジニアの方々で
ホームパーティーをして、
そのお子さんたちにすごく癒やされました♡
沖縄にいたときは当たり前のようにちびっこと遊んでいたので
東京に来てからははじめてだったのですごく新鮮でした。
そして、変にませてなかったのが感動。
ああー、このまま大きくなってくれと願うばかりである。

とまとについて

えっと、ネタ切れと時間切れのため、今日はゆる~い内容でお届けいたします。

とまとについて

簡単な自己紹介をします。

はじめまして、とまとです。
ツイッター名はたかこでやってます。

沖縄出身で現在は都内にてつよいエンジニアになるべく日々精進しています。
お気づきの方もいるかと思いますが、かなりのぽんこつなので
びしばし、ご指導いただけるとほんとおおおに嬉しいです。

なぜとまとの成長日記なのか

えー、大変とまとが好きなのです。
毎日食べるくらい好きです。
でも、とまとって高いです。1パックちょっといいとまとだと400〜500円します。
実家にいる時本当にバクバク、1日に大玉2個とか食べてましたが、最近は控えめに食べてます。
美容と健康にいいとまと皆さんも食べましょう。

あと、なんかとまとってかわいくないですか。
上からよんでも下からよんでもとまとですよ。
うらおもてとかなさそうじゃないですか。
フォルムもまるいやつもいれば、ちょっと細長いやつもいれば、なんか双子ちゃんもいるし。

好きなとまとは沖縄のなんかちょっと細長いミニトマトがすきです。
大玉のとまとだと、最近スーパーで売ってるフルーツトマトが好きです。
正直味覚音痴なのですが、とまとだけは愛で頑張って違いを必死で探してます。
でも、大体とまとはおいしいです。

一度、いろんなとまとを買って食べ比べするのが夢です。
そして、たらふくとまとを貪りたいです。

そろそろとまとを語りすぎたのでおわります。

まとめ

こんな感じの人です。
趣味の話とかもこんな感じでゆるーくしていきますので、よろしくお願いします。