DBをmigrationする
まず最初に、入力したデータを格納するDBを作ります。
モデルを作成すると自動的にマイグレーションファイルが作られるので、DBディレクトリから確認しましょう。
そこから型とカラム名を定義します。
マイグレーションファイルのdef changeとendの中に以下のように定義します
t.string :name
t.text :body
stringが短い文字列、textが長い文字列、integerが数字、booleanがtrue/falseなど二択の時と覚えておけば大体は対応できるかと思います。
Idやcreated_at、updated_atは自動で追加されるのでここでわざわざ定義する必要はありません。
Migrationファイルを編集できたら
rake db:migrate
にて、DBを構築します。
※DBに項目を足したい場合は以下のコマンドで追加用のマイグレーションファイルが現れます。
rails g migration Add(カラム名)To(コントローラー名(複数形))
追加する場合はdefとendの中に以下のように書きます
add_column :コントローラー名(複数形), :型
add_column :hoges, :title, :string
Controllerの書き方
アクション = だいたいURL
URLのコントローラー名の次にくるURLとなります
https://アプリ名/コントローラー名/アクション名
対応するviewと同じ名前です
Viewが存在せず、処理だけ行うアクションもあります(createなど)
def #アクション名
#この中に処理を書く
end
この中でやること
インスタンス変数をいうアットマークがつく変数の中にviewに渡したいデータを入れます。ここでは@fugasがインスタンス変数です。
def index
@fugas = Hoge.all
end
Indexの場合、一覧でデータを表示したいので複数系担っています。Hogeというクラスオブジェクトのテーブルにある全てのデータを格納します。
.allについて
これはメソッドといい、オブジェクトに対して命令を行うものです。
自分で作成するメソッドとあらかじめRuby側が作っていて決められているものがあり、allやcreateなどはあらかじめ定められているクラスメソッドです。
※メソッドにはクラスメソッドとインスタンスメソッドというものがあります。
※クラスは設計図、インスタンスが(それを元にして作られた)実体と覚えてください。クラスは集合体ですが、インスタンスがクラスから抽出して実際に取り扱うデータになります。
Viewの書き方
Indexの場合、インスタンス変数の中にある配列を一つ一つ取り出します
<% @fugas.each do |fuga| %>
<% end %>
ちなみに%を使った書き方は、htmlの書き方のファイルの中で、Rubyの構文を使用する時に使うものです。
<% %>
のように記載する場合は、表示はせず演算だけしたい場合であり
<%= %>
のようにイコールをつけて記載する場合は、表示はさせたい場合です
※ないデータを表示しようとするとエラーになるので、仮のデータを入れるか、フォームから入力してデータを入れてください
初心者の方は中身がないオブジェクトにメソッドを使って取り出そうとするためエラーが出るというケースが多発しがちです。
Routingの書き方
いろいろ細かい指定の方法はありますが、初心者の方はとりあえず
resources :コントローラー名(複数形)
のように書いておけば一通りルーティングが通って繋がるようになります。これを指定しないとリクエストを受け取った時にどれを表示するかが紐づけられていない状態なので、必ず指定しましょう。
詳しいことや仕組みはこちらを見てください。
https://railsguides.jp/routing.html
これでオブジェクトの中にデータが格納されていれば表示されるはずです。ここでサーバーを起動すると今はおそらくNo Method Errorが出るでしょう。空のオブジェクトに対してメソッド が命令しているので当然です。この後、フォームを作成してデータを入れていきましょう。
※Model
Modelはテーブル間を連携させる時に主に使うので今回は記載しません。後ほど説明します。