個人的なプログラミングメモ~Ruby on Rails~

完全な個人的なページです。

学校の勉強を大学ノートにメモるみたいに、プログラミングの勉強もノートとかにまとめる作業をしたかった。

後で見返したりしたいし。

ただ、PCでやってる勉強の内容を紙のノートに書くのとか、次元をまたぎ過ぎて迷子になりそうだし、せっかくだから公開しちゃお。ということで、ブログの記事上にまとめることにした。

他人が読んで分かりやすいように書くという意識は、無い。

ルーティング→コントローラー→ビュー

railsはルーティング→コントローラー→ビューという順番で動く。

RCVと覚える。

ルーティングで作られたコントローラー&アクションの対応表をもとに、

コントローラーが動いて、ビューの内容が表示される。

コントローラーが基本Rubyの働きをするから、機能とか変数とかはここに書く。

アクション

アクションは、コントローラと同じ名前のビューフォルダから、アクションと同じ名前のHTMLファイルを探してブラウザに返す。

例えば「home_controller.rb」の中にある

def top
end

みたいなアクションの場合、「views/home/top.html.erb」を探す。

.erbファイル内のRubyの変数はコントローラーのアクション内に書く

そのまま。

なんでだろう、整理しやすくするため?

DBを作って変更を加える

ターミナルで「$rails g model Post content:text」みたいな感じで書くと

「Post」というモデル(rails上の特殊なクラスのこと)名のファイルが出来る。

同時にpostsと名前が付いたマイグレーションファイルpostsカラムが出来る(正確にはテーブル作成後)。

rails consoleを使って、DBに情報を入れていく

rails consoleをターミナル上で起動させて、

post = Post.new(content:Hello world)

と書くと、contentが「Hello world」という新しいPostインスタンスが作成される。

(インスタンス=クラス(モデル)を使って作成されるものの総称)

(クラス=データと処理をひとまとめにした設計図。その設計図から作られるのがインスタンス)

その「Hello world」というpostインスタンスを保存したいときには、

post.save

とする。

DBからコンテンツを取り出す

Post.allを使うと、全てのデータを配列で取り出せる。

Post.all.contentにすると、content列にあるデータだけを取り出せる。

共通のレイアウトにまとめる

Railsでは、「views/layouts/application.html.erb」に共通のHTMLを書いておくことができる。

変数params

コントローラのアクション内では、ルーティングで設定したURLの「:id」の値を取得することができる。

その値はparamsという変数にハッシュとして入っている。params[:id]とすることで、その値を取得することができる。

例えば、投稿postだと、

Post.find_by(id: params[:id])

とすると、idがparams[id]の値を受け取ることが出来る。

フォームの値もparamsで受け取ることが出来る。例えば、params[:content]みたいな感じで受け取る。

フォームの値をDBに保存する

まず、ルーティングに記載をする。

今までは
get “posts/new” => “Posts#new”

のようにgetと書いていたが、フォームの値を受取るには、

post “posts/create” => “Posts#create”

と書く。

通常は「get」で、フォームの値の時は「post」と覚えておく。

追記:
正確には
・データベースを変更しないアクションが「get

・データベースを変更するアクションが「post

である。

form_tagメソッドを使って、送信先を指定する。

form_tag(“送信先のURL”) do

end
と書くと、送信先を指定できる。endを忘れない。

リダイレクト設定

リダイレクトはコントローラー上で設定できる。

redirect_to(“URL”)

とアクションの中に書けばOK。

投稿の削除

Post.find_by(id:n)を使って、投稿を取得。

そのあとで、destroyメソッドを使ってpost.destroyとすると消せる。

バリデーションルールを作る

投稿サービスで空の投稿がされないようにする。

バリデーションはモデルで設定する。

validates :検証するカラム名, {検証する内容}

とすると出来る。

例えば、contentsカラムが空で送信されないようにするには、

validates :content, {presence :true}

とする。presenceが値の存在を検証するやつ。

同じユーザーが登録されないようにするには、emailの重複をバリデーションする。

validates:email, {uniqueness: true} とすると、重複をはじける。

因みに検証内容の部分は複数指定できる。

emailが空で送信されないかつ、重複だとすると

validates:email, {presence :true,uniqueness: true}

変数flash

railsのアクションで変数flash[:notice]に文字列を代入すると、flash[:notice]をビューで使うことができる。

変数flashは1度表示された後に自動で削除されるようになっているのが特徴。

データベースにカラムを追加=マイグレーションファイルをまずつくる

railsでマイグレーションファイルのみを作るには、

「rails g migration ファイル名」

とコンソールで書く。

テーブルに変更を加えるにはマイグレーションファイルにchangeメソッドの中に変更点を書く。

「add_column :テーブル名, :カラム名, :データ型」

と書く。

タイトルとURLをコピーしました