_pathと _urlの違い/simple_format/if文の戻り値「nil」の判定/「privateメソッド」とは

Rails - 名前付きルートにおけるpathと urlの違いと使い分け

pathは相対パスで、urlは絶対パスである。

root_path -> '/'
root_url  -> 'http://www.example.com/'

使い分けとしては、

_path: 通常はこちらを使う。例えば、Viewにおける利用。 _url : redirect_toする場合のみ。主に、controllerにおいて用いられる。 HTTPの標準としては、リダイレクトのときに完全なURLが要求されるため。

simple_format(text, html_options = {}, options = {})

自分の解釈・・・通常入力したテキストをHTMLに変換してくれる便利メソッド

単純なフォーマットルールを使用してHTMLに変換されたテキストを返します。2つ以上の連続する改行(\ n \ nまたは \ r \ n \ r \ n)は段落と見なされ、

タグでラップされ ます。1つの改行(\ nまたは\ r \ n)は改行と見なされ、
タグが追加されます。このメソッドは、テキストから改行を削除しません。

任意のHTML属性を html_optionsに渡すことができます。これらは作成されたすべての段落に追加されます。

オプション :sanitize - falseの場合 、テキストをサニタイズ しません。 サニタイズとは…HTMLコードなどの特殊文字を無視し、そのままの表記で表示させること。 (例)通常、
を改行処理するが、それを無視し、
とそのまま表示すること。

:wrapper_tag - 文字列ラッパータグを表す、デフォルトは「P」

hメソッド(html_escape)

if文の戻り値「nil」の判定について

nilをif文の条件式中にそのまま書くと、if文はどのような値として扱うのでしょうか?答えは、「if文中のnilはfalseとして扱われる」です。

「privateメソッド」とは

privateメソッド・・・クラスの外からわ呼び出せず、クラスの内部でのみ使えるメソッド。クラス内でprivateキーワードを書くと、そこから下で定義されたメソッドはprivateメソッドとして定義されます。 厳密にいうと、privateメソッドは「レシーバを指定して呼び出すことができないメソッド」です。

Pull Request プルリク(テンプレート)メモ

# Pull Request プルリク(テンプレート)
```
# 目的
* どういった目的を達成するためにPRを出したか書きましょう。チケット、設計書などがあればそれも記載。
# 方針
* 目的を達成するためにどういった手段をとったか、対象範囲や、逆に除外した部分などを記載する。
* 例) すでに実装されている〇〇モジュールを流用するようにしました。
# 実装
* 方針に沿って実装していく中でレビュアーに伝えたいものなどの補足。図や疑似コードなど。
* 画面などを変更した場合はスクリーンショットなども貼るとわかりやすい。
# テスト
* コードの品質が担保されているかを確認するために、実施したテストについて記載します。
* 例) テストコードでカバーできないView部分に関しては開発環境で画面を確認しました。
# 相談
* 自信がない部分や、特に確認してもらいたいところなどについて記載します。
```

調べる項目

## 調べる項目

* ミドルウェア・・これがないと、railsなどは動かない。
* ライブラリとフレームワークの違い(体系的に理解したい)→ライブラリ・・rubyなど、コードで自分で使うもの。→フレームワーク・・型が決まっているので、ライブラリなど少し複雑になっている。
* `PATCH`と`PUT`の違い
* `link_to`に*disable_with*の二度押し防止をしたい。
* Moduleの使い方を意味を理解する。↓コントローラー生成[rails g controllerでディレクトリの階層以下にファイルを作成する方法 - mikami’s blog](http://mikamisan.hatenablog.com/entry/2016/03/10/161715)```module Admin コントローラ入れるend```
* Rspecスクリーンショットが出るように設定したい。<spec/support/spec_helper.rb>```RSpec.configure do |config|  config.before(:each, type: :support) do    driven_by :selenium_chrome_headless  end```
* `spec_helper.rb`, `rails_helper.rb` のテストコードを理解する(読みたい)
* RSpec、FactoryBotの設定、テスト実行ごとに既存のデータを削除していないからか、userがFactoryBotがランダムのidで作成しているのか。ちょっとわからない。。。```Capybara::ElementNotFound:       Unable to find link "download783"  ←めちゃuserが生成されている。```

* `data: { confirm: "#{user.email}削除してよろしいですか?" }`これだけで、できてしまった。本来であればconfirm画面が出た時に、if文で「ok」「cancel」の処理をしないと行けない。←これを[coffee_script]でする方法を知りたい。[railsgithubみたいな確認ダイアログを簡単に設定する方法 - Qiita](https://qiita.com/ihatov08/items/a0b3b043ba809fdc2cd6)
* <rails_helper.rb>でドライバーの確認した。```require 'capybara/poltergeist'```
* 読み方を知りたい([Method: Capybara::Session#accept_alert      — Documentation for jnicklas/capybara (master)](https://www.rubydoc.info/github/jnicklas/capybara/Capybara%2FSession:accept_alert)```script, text, optionとかなんのことなのかイメージができない。```
* ドライバ≒ブラウザだと思っているが、これって正しいのか?例えば、、ドライバーを`chorome`に設定した時にRspecの裏で動いているのは`chromeブラウザ`で動かしているイメージでやっている。あっているのか?

* redirect_toでパラメータを送る方法
* Rubocopを試す。
* バリデーションの順番変えたい。(カスタムバリデーションの実行を最後にしてほしい)
* seedを読み込みたい。一回だけ読み込みたい。何回もしたらそこで増えていく。
* `form_control`を当ててもスタイルが変わらないところがある。
* React.js, Vue.js, Nuxt.js
* docker.[『マンガでわかるDocker』を読んでDocker初心者がDockerがもっと好きになった話 - #がみぶろ](https://jumpei-ikegami.hatenablog.com/entry/2018/04/29/162455)

 

 

3月メモ、編集中

# 2019/3/6# 2019/3/6
`エンコーディング`…データ形式をコンピュータが読み取れるようにデータ形式を変更すること。「○○エンコード」と出てきたら「○○の形式を変換する行為」と読み替えてみる。
`名前解決`…IPアドレスドメイン名に変換したり、ドメイン名をIPアドレスに変換すること。このIPアドレスドメイン名を変換してくれる仕組みを「 DNS」と言い、変換のお仕事を生業にしているコンピュータは「 DNSサーバ」と言います。
* カスタムバリデーションについて[Active Recordバリデーション - Rails ガイド](https://railsguides.jp/active_record_validations.html#%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%90%E3%83%AA%E3%83%87%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B)
# 2019/3/7`リゾルバ`…ドメイン名に対応するIPアドレスを教えてほしいと頼むプログラムのこと。
`スタブリゾルバ`…DNSサーバーに対して「ドメイン名に対応するIPアドレスを教えてほしいと頼む」*PC側のプログラム*のこと。
`フルサービスリゾルバ`…PCからの「リクエストに対して答えがわからない時に他のDNSサーバーへ問い合わせする」*②DNSサーバー側のプログラム*のこと。```※ DNSサーバーは「①情報を管理する専用DNS」,「②他のDNSサーバーから情報を取りに行きPC側に伝達する専用DNS」のに種類がある。```
`DNSリソース`…リソースレコードのこと。(たぶん。。)
`Resolv::DNS::Resource::IN::A`…*DNSサーバー*の*リソースレコード*の*クラス:IN*の*タイプ:A*のことを表している。[TCP/IP - DNSとは その2](https://www.infraexpert.com/study/tcpip23.html)
「A」(Address)…```ホストのIPアドレスを指定。 (例)intra1.infraye.com. IN A 192.168.0.1 → intra1.infraeye.com のIPアドレスは 192.168.0.1 であるという意味。```
「MX」(Mail exchange)…```ドメインの配送先を決める。ドメインのメールサーバを指定。 (例)infraye.com. IN MX 10 mail1.infraeye.com. → 例えば cool@infraeye.com のメールはmail.infraeye.comに転送すれば届くという意味。  → 10というのがpriority:プライオリティ(優先度)をあらわすもので、20, 30,,,という風に表されて数が多い方に配送して死んでたら、次のメールサーバみたいな感じで行く。```
```メールアドレスのドメインで名前解決を行う時は、Aレコードだけにまとめて書いて有るわけではないので、2つ書く必要がある。Aレコードにまとめて書いてある時があれば、MXレコードに分けて記載しているときがある。「gmail.com」に関してはAレコード飲みに書いてある。AレコードMXレコード```
`/etc/hosts`…ホスト名とIPアドレスの対応付けを書いておくファイルのこと。下記の様な感じ。```##127.0.0.1 localhost255.255.255.255 broadcasthost::1             localhost
```
`DNSサーバー`…PCはこれにアクセスしてWebページの閲覧をしてる。これがないとWebサイトは見れない。
`/etc/resolv.conf`…DNSのリゾルバが使う設定ファイルのこと。(DNSゾルバの設定ファイルのこと)
`search(リゾルバの設定オプション)`…ホスト名をルックアップ(名前解決)のための検索リスト。
# 2019/3/8```> Resolv::DNS.new 「DNSゾルバが生成される。その中のカラム。」=> #<Resolv::DNS:0x007feee9598a50①@config=  #<Resolv::DNS::Config:0x007feee95989b0   @config_info=nil,   @initialized=nil,  ②@mutex=#<Thread::Mutex:0x007feee9598938>,   @timeouts=nil>, @initialized=nil, @mutex=#<Thread::Mutex:0x007feee95989d8>>```
①@configについて```自ホスト名をsystem-1.mydomain.com,ネームサーバを192.168.0.1,ドメイン名をmydomain.comとしてDNSゾルバを設定します。 (config)# dns-resolver hostname system-1.mydomain.com(config)# dns-resolver nameserver 192.168.0.1(config)# dns-resolver domain mydomain.com

ネームサーバー...DNSサーバーのこと。言い換えた表現で違いは全く無い。```
②@mutex(ミューテックス)について```排他制御で使われているものの1つ。0か1かしか使わないセマフォみたいなようなもの。「未使用 or 使用中を示す目印のこと。」

セマフォ...あと何人使えますよ。を表す数字のこと。

```

 

 

# 2019/3/16
マルチスレッド(http://e-words.jp/w/%E3%83%9E%E3%83%AB%E3%83%81%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89.html

Node.js-安定版(LTS)-
[GitHub - ttskch/select2-bootstrap4-theme: Select2 v4 theme for Bootstrap4](https://github.com/ttskch/select2-bootstrap4-theme)


*Ajax, Async, Await? ア? エイ?*
非同期の処理を書きやすくするやつ

[Node.jsのバージョンによる違い - JavaScript勉強会](http://jsstudy.hatenablog.com/entry/Difference-in-version-of-Nodejs#%E5%AE%89%E5%AE%9A%E7%89%88LTS)

 


→Errors:`IPv6 address must be 16 bytes`

gmail.com
→登録できた。

mail.rakuten-card.co.jp
→Errors:`IPv4 address expects 4 bytes but 0 bytes`

法則は分からない。

 

質問のテンプレートについて

# 質問のテンプレート

 

* 自分が何が分からないのか。
 状況を整理し、`分かっている範囲`と`分かっていない範囲`を明確にする
  状況には「作る前(検索の仕方等)」,「作成中(実装方法等)」,「作った後(エラー解決等)」がある。
* 説明の仕方
「作ってみたがうまく行かず、解決方法を調べたが理解できない」のであれば、何をどのように作ってどうなったかを説明し、調べた解決方法とその内容及びどこが理解できないのかを順を追って伝える必要があります。

・質問では、初めに自分の実現したいことを書く。
・どの様な状況が起きているか。
・上記の状況に対して、本当はどの様なことを期待していたのか書く。
・何ができていて、何ができていないか(分かっている範囲と分かっていない範囲)を書く。
・何をトライしたかを書く。
・どの様な環境で実装しているか。
```
# 質問内容
* 質問では、最初に自分の実現したいことを書く。

# エラーがどの様な状況で起こるか
* 上記の状況に対して、本当はどの様なことを期待していたのか書く。
* どの様な状況が起きているか。

# 分かっている範囲と分かっていない範囲分けて書く。
* 何ができていて、何ができていないかを書く。

# 何をトライしたかを書く。

# どの様な環境で実装しているか。
```

 

## 徹底すること

## 徹底すること
* 公式がいっていることが全て。
* 質問する時は公式にこうやって書いてあるので、と言えるようにして質問するようにする。
* 調べるときに意識すること。無駄なことに時間を使わないようにするために!
「解決したいことなのか」と「解決の糸口になるか」
* 自分の今の状況・事実を調査する必要!!
仮設を立てて、検証ができていない。

二段階認証について

# 二段階認証について
管理ユーザーが一般ユーザーを作成する際、
メールアドレスのみ登録し、パスワード設定URLを添付したメールを登録時に送信する。
その際に、そもそもメールアドレスが間違っていたら、関係の無いユーザーがログインし情報漏洩が起きるので、二段階認証を提案された。

方法としては、
方法①
・電話番号
・メールアドレス
を登録し、電話番号宛にショートメールでワンタイムパスワードを発行、メールアドレスには本人認証するためのURL添付する。URLにはワンタイムを入力し、パスワードの設定をしてもらうようにする。

方法②(二段認証ではない)
今回の一般ユーザーは取引先のクライアントを想定しているので、
メールアドレスのドメインでバリデーションをかけて、メールアドレスの間違いを防ぐ。