ゲームエフェクトデザイナーのブログ | A Real-Time VFX Artist's Blog

About Making Materials on UE, Making Tools with C#, etc

Rubyを始めてみた3:MVCの一連の流れ

前回に引き続き、こちらの Rails入門 の記事を進めていきました。

RailsにおけるMVC(モデル / ビュー / コントローラ)の作成に入っていきます。
ただ、初めての概念ばかりで何をしているのか把握しづらかったので図を作りました。

まず最初にコントローラで直にhtmlを書き換えていますが、このようなイメージかなと。

f:id:moko_03_25:20190504163507p:plain

次のステップでテンプレートと変数を使ってhtmlを書き換えていますが、こんな感じかなと。

f:id:moko_03_25:20190504163501p:plain

さらにデータベースを制御するステップはこんな感じ?(間違ってるかも)

f:id:moko_03_25:20190504175521p:plain

これで何をしているか把握しやすくなった気がします。

使用しているエディタ


最初は秀丸を使っていましたがツリー表示が無いと不便だったのでATOMに変更。

f:id:moko_03_25:20190504165244p:plain

 

起こったエラーなど


まずはコントローラのアクションメソッドでテキストを「render」で直に出力する解説をされていますが、後の起動時にうまく動作しませんでした。

下記のように変えたらいけたらのですが、Railsのバージョンによるものでしょうか。。

def hello render plain: 'Hello!' end
def bye render plain: 'bye!' end

 

ちなみにこの「plain」については、こちらの記事を参考にさせていただきました。

そして、実際にアプリケーションを起動すると下記のようなエラーが起きました。

C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/routing/mapper.rb:81:in `check_via': You should not use the `match` method in your router without specifying an HTTP method.
(ArgumentError)
If you want to expose your action to both GET and POST, add `via: [:get, :post]` option.
If you want to expose your action to GET, use `get` in the router:
Instead of: match "controller#action"
Do: get "controller#action"


「matchを使わずgetを使え」という感じの内容になっています。

こちらに関しては「teratail」でドンピシャで質問されている方がいらっしゃいました。
Ruby - Ruby on Railsでルーティングのエラー|teratail

つまるところ下記のように記述すれば良いようです。

get 'hello' => 'booklist#hello'
get 'bye' => 'booklist#bye'


これで無事うまくいきました。ありがたや。。
もしも match をそのまま使う場合はオプション指定が必要だそうで‥

match 'hello' => 'booklist#hello', via: :get
match 'bye' => 'booklist#bye', via: :get


こちらでいけました。
「via: :オプション(今回の場合は get )」を最後に付与すれば良いようです。

ちなみに「=>」は「, to:」でもいけるようで、前者の方が記述は楽ですが、ググると後者で解説されているケースが多いので知っておくと良いかと思いました。

ついでに、ルーティング周りで参考になりそうな記事もいくつかペタペタと。

 

文字コードについて


下記のテンプレートの作成の手順では文字コードについての解説があります。
ビューの作成とデータの受け渡し - Ruby on Rails入門

手元で試したところ、Rails用に作成するテキストファイルは基本的にUTF-8で保存しておけば、日本語を使用していても「# coding: utf-8」や「#! ruby -Ks」を記述しなくてもエラー無く正常に表示できました。

データベース制御のメモ


データベースの作成

rake db:create


モデルの作成

rails generate model モデル名


マイグレーションスクリプトの実行(テーブルの追加)

rake db:migrate


テーブルにデータを追加

rake db:seed


SQLiteコマンドラインツール起動と終了

rails dbconsole 起動
.quit 終了


指定のテーブルからSQLの構文で全データを取得

select * from テーブル名


データベースの情報をHTMLに反映させる流れまでうまくいきました。

とりあえず今回はここまで!

続きはこちら。
Rubyを始めてみた4:MVCの続き - ゲームエフェクトデザイナーのブログ (新)