【Rails】'Routing Error: No route matches とビューファイル

目的

 'Routing Error'と向き合うときにビューファイルを調査し忘れて、結果として調査に長い時間をかけた経験から自分の解釈を仕方を備忘録として残し共有化する。

主な'Routing Error'の原因

  1. ルーティング(routes.rb)の誤記
  2. ルーティングでHTTPメソッド,アクションの設定間違い
  3. ビューファイル(〇〇.html.erb)のリクエスト 設定間違い

Railsのデーター送受信相関図

f:id:yagishi_tan:20200926114538p:plain

ルーティングとビューファイルの関係

 私はこの相関図を見てエラー文を読み解いた時、コントローラーが怪しいと感じてしまいました。

 この時の私は、コントローラーの役割を忘れてしまっていたのです。

  • コントローラーはリクエストに対してレスポンスとしてビューを返す

 視覚的にわかるように先ほどの相関図でイメージを追記します。 f:id:yagishi_tan:20200926120039p:plain

 クライアントの中とサーバーにビューファイルが居ることになります。

 認識としては、クライアントからサーバーにリクエストを送る手段は二つなので

  1. CLI(Command Line Interface)によるコマンド入力
  2. GUI(Graphical User Interface)による入力

web上でのビューファイルの表示とはGUIをクライアント側で起動させていることだったんですね。

 クライアントはビューファイルを使ってルーティングにリクエスを行っていることがわかりました

 ActionViewの考え方を後から知りましたが、エラーの原因特定には影響ないと判断しています。ビューファイルの記述に沿ってクライアントがルーティングにリクエストを飛ばすことには変わりないと思っています(2020年9月29日追記)

結論

 クライアントはビューファイルを使ってルーティングへのリクエストを行っているのだから、ルーティングエラーの原因になる。だからこそ、'Routing Error'が起きたらルーティングの記述をチェックした後、ビューファイルを見るべきだと理解できました。

所感

 理解してみると当たり前だし、理解している人からしても当たり前だと思います。でも自分は理解できていませんでした。だれかのMVCの理解に貢献できたらなと思いました。

【HTML】hrefとsrcの違い【属性の知識】

href属性とsrc属性ってなに?

HTMLで<a>タグだとhref、imgだとsrcを使ってurlを書くけど違いは何?

・href属性は、リンクアンカーの移動先や基準URIの設定をするための属性

・src属性は文書内に埋め込むスクリプト、他のHTML文書など、外部リソースのURIを指定します。

(出典:W3 Watch Reference)

これだけみても分からなかったので調査をすることにしました。

reference.hyper-text.org

 

href属性とsrc属性のhrefとsrcって何?

hrefはHypertext Referenceの略語で直訳するとハイパーテキストの参照。

                          (出典:weblio

srcはsorceの略語で情報源。(出典:weblio

href属性とsrc属性を使える要素って何があるの?

href属性とsrc属性を使える要素をまとめてみた。

要素

要素概要

href

src

<a>

リンクの出発点を指定する

 

<area>

リンク領域を設定する

 

<base>

ページに記載されたリンク先URLの基準となるURLを指定する

 

<link>

関連する文書ファイルを指定してその関係を定義する

 

<audio>

文書内に音声ファイルを埋め込む

 

<embed>

文書内に音声や動画などのデータを埋め込む

 

<iframe>

文章の中にインラインのフレームを作成する

 

<img>

文書内に画像を表示する

 

<input>

テキスト入力欄やボタンなどの部品を作成する

 

<script>

文書内にスクリプトを埋め込んだり外部からスクリプトを読み込む

 

<source>

メディア要素に対して選択可能なリソースを複数指定する

 

<video>

文書内に動画ファイルを埋め込む

 

 表にまとめるまでは、hrefとsrcの両方を使える要素があると思っていました。

しかしながら、実際にはそのような要素は存在しませんでした。

調査結果からの自分なりの解釈

・href属性について

 href属性は、文章からどこか別の場所に移動したい場合に行き先を指示してあげる属性だと感じました。この解釈だと、link要素でcssファイルを"呼び出す"場合はsrc属性を使うことに納得ができます。linkはhref属性ですね。定義する場所を指示していると認識した方が良さそうです。(2020年9月22日修正)

・src属性について

 src属性は、link要素でcssファイルを呼び出すことができます。呼び出すのは文章だったり、動画ファイルだったりJavaスクリプトのようなスクリプトだったり様々なようです。この記事の一番最初に書かれていた”文章内に(ファイルを)埋め込む”属性という認識が一番納得できそうです。

所管

 調査が終わってこの記事を書こうと思っている頃には内容を理解してしまっていて、”自分が何を疑問に思っていたのか”が抜け落ちていることに気が付きました。

記事を描こうと思った動機が曖昧になってしまうと何を書いたら良いのか分からなくなってしまうので

・何を疑問に思ったのか

・なぜ調べようと思ったのか

をしっかりと後から思い出せるようにしていきたいと思います。

いままでのこと これからのこと

なぜ?プログラミング学習をしようと決めた!?

なぜプログラミング学習をしようと決めたのか自分で整理をしてみます。

 

1.学生時代

 学生時代は電子工学を学んでいた。プログラミング言語C++を学んだり、実験で旧式のマイコンを使い機械語に触れる機会もありました。そのような環境で勉強をしていたので、友人たちはほとんど通信系の研究室へ行ったのですが、私はデバイス研究(半導体研究)の道へ行きました。その頃は、日本は製造業で成り立っているんだから物づくりに関わらないとダメだと思っていたような気がします。

 

2.サラリーマン時代

 初めて入社した会社には、2008年4月〜2020年8月までお世話になりました。この会社は、とある大企業の子会社で、生産技術として本当にいろいろな経験をさせてもらいました。新工場立ち上げ支援、海外prj.参加、新製品開発フィジカルロット生産トライアルなど会社内でも類を見ないほど多種多様な経験をしていたなと思います。

 

3.転職の考え始め

 転職の考え始めは今でも忘れられません。初めての上司(部長兼課長のような方)が初めての面談で”お前たちの世代は転職が当たり前になる世代だから自分の価値を上げるように仕事をしなさい”と言われたことです。入社3ヶ月も経っていない頃のことです。このことがきっかけで、自分の経験になることには積極的に参加するようになりましたし、上司にやりたいことを提案するマインドが出来上がりました。

 そして、自分は世の中にとってどの程度価値があるんだろと悩むきっかけになりました。

 

4.大先輩の働く姿

 2019年の秋口のことですが、私が兼ねてから上司に提案していた案件が通り予算が貰えました。そこで付き合いのあるメーカーさんを呼んで打ち合わせをしたのですが、私が入社した年に嘱託を定年退職された大先輩が技術者として来ました。なんと76歳にもなる方ですが、現役で働いているんです。私はこのままここで働いていて大先輩のように働き続けることができるのかと考えてしまいました。

*大先輩に当たる方は、エアー回路と呼ばれる動力制御に精通されている方で専門的な知識を豊富に持っている方でした。今現在では会社内でそのスキルを学ぶことはできません。

 

5.転職を決める

 サラリーマン時代には自分の価値を上げたいという思いが燻っていました。そこで76歳でも働き続ける大先輩の姿を見ました。会社は私に貴重な経験を与えてくれました。すごく感謝しています。ですが、大企業の技術者に求められる一番の技術力は調整力でした。勿論今まで育てた調整力は大事に育て続けますが、私は76歳まで働ける技術力が欲しくて堪らなかった。そうした時にプログラミングを見つけ、学生時代を思い出し、今現在学習を始めています。

 

6.最後に

 こうして考えを整理してみると12年間の全てが今の自分を作る土台になっていると実感しました。既にスタートは切ったのであとは山頂に向かって走り続けたいと思います。

 

 以降は自分語りをやめてプログラミング学習に勤しみます!

 よかったら見てね!