Ruby on Rails 使い方まとめ
初心者向けにRuby on Rails の使い方をまとめてみます。
はじめに
Cloud9に環境を作っておくのがおすすめです。
Cloud9だと簡単に試せて、失敗してもコピーしたり、削除が簡単です。
Rails アプリケーションの作成
アプリ用フォルダ、ファイルをコマンド1つで作成。
rails new アプリ名
サーバー起動
サーバーを起動するとURLにアクセスして初期画面が表示される。
rails server
cloud9の場合
cloud9でコマンドで起動する場合はこちら。
アプリの階層に移動してから実行しないと、rails コマンド入力しても Usage:~~~~~が表示されてしまう。
rails s -b $IP -p $PORT
Runボタンを右クリックして「New Run Configuration」にRuby on Railsを追加しておくと便利です。
開発でよく使う階層
・app/assets
・app/controllers
・app/views
・config/routes.rb
・db/migrate
・public/
画像など配置
・Gemfile
gemの追加(拡張機能)
アプリケーションに必要なMVC
・コントローラー(Controller)
・ルーティングから呼び出すアクションを作成する。
・変数の定義やデータ変更処理など
・ビュー(View)
・HTML、CSSでページを作成
・コントローラーから受け取った値を表示するなど。
・DB操作(Model)
ページの作成
ページ表示の仕組み
ページにアクセス
↓
ルーティングを確認
↓
コントローラーの該当処理を呼び出す
↓
ビューにコントローラーの結果を返す
ページの追加でやること
・ビュー:○○○○○.html.erbをviewフォルダ内に作成
・コントローラーにルーティングから呼び出すアクションを追加
・routes.rbに新規ページのルーティングを追加
コントローラーとビューの作成
rails generate controller コントローラー名 アクション名 例) rails generate controller home top
このコマンドによって
・ビューファイル「app/view/home/top.html.erb」ができる。
・コントローラー「app/controller/home_controller.rb」ができる。
変数
・アクションで定義した変数はビューでは使用不可
※@が先頭にある変数はビューでも使用可能
・sessionの指定方法
session[:キー名]
ルーティングの編集
アクセスされたURLからコントローラのどのアクションを呼び出すか決めるとこ。
・config/routes.rbに設定する。
・get、postで役割が異なる。
・get:DBを変更しないアクションを呼び出す。
・post:DBやsessionを変更するアクションを呼び出す。
get "home/top" => "home#top"
"ドメイン/home/top" にアクセスされたら
=>
homeコントローラーのtopアクションを呼び出す。
get "post/:id" => "posts#show"
・ドメイン/post/:○○ にアクセスされたら、showアクションを呼び出す。
・:○○はなんでもOK。
・指定された○○は、params[:id]で取り出せる。
※post/:idのルーティングは、post/indexより下に記述する。
(ルーティングは、ファイルの上から合致するか検索しているため)
post "posts/create" => "posts#create"
・フォームから値を受け取る時は、getではなくpost。
・こんな感じでフォームを挟む。
<%= form_tag("posts/create") do %> # HTMLでformを記述 <% end %>
・フォーム内のsubmitボタン押したらデータ送信される。
・フォームのname属性に指定した文字列でデータを受け取る。
params[:hoge]で受け取るとき <textarea name="hoge">初期値など</textarea>
データベースの使い方
テーブルの新規作成
DB変更
rails g migration ファイル名
・作成されたマイグレーションファイルを編集して、rails db:migrateで反映する。
def change #変更内容を追記 add_column :テーブル名, :カラム名, :データ型 end
データベースのデータを使う
post = Post.new(content: "○○○○○") #作成したテーブル:Post(モデル)を使って、インスタンス:post を生成する。 #カラム:contentの値="○○○○○" post.all #テーブル:post の値をすべて取得 #post.all[0].content という感じで値を取得することも可能 post.first #テーブル:post の最初の値をすべて取得 post.find_by(id: ***) #id=***に一致する値を返す post.save #if文を使って保存できたかどうかで処理を分けたりする。 #postテーブルへの保存が失敗した時にpost.errors.full_messagesにメッセージが入る。 #eachを使って全て表示するといい。 post.all.order(id: :desc) #降順に並べ替え post.destroy #削除
共通レイアウト
・views/layouts/application.html.erb を編集する。
・<%= yield %>には各ビューファイルの内容が入る。
必要に応じて使う
リンクなど
link_to("表示テキスト","リンク先") #<a href="リンク先">表示テキスト</a>に変換される。 link_to("表示テキスト","リンク先",{method: "post"}) #ルーティングのpostを検索 redirect_to("リンク先") #DBへの変更処理の後に、一覧ページを表示するといった処理などで使用する。 render("posts/new") #newアクションを経由せずに、new.html.erbを表示。
バリデーション
・model/○○○○○.rb に記述する。
#validates :検証するカラム名, {検証する内容} #空での保存を禁止する validates :content, {presence: true}
flashメッセージ
flash[:notice] = "○○○○○" #アプリ共通で使うので、application.html.erb内に記述すると良い。
<%= flash[:notice] %> <!-- htmlにはこんな感じで書く -->
コマンドラインで簡単な確認をする
rails console