RubyOnRails入門。開発環境~アプリ作成

はじめに。

この記事は筆者が学びながらアウトプットして書いています。Railsのことはまだあまりわかっていないのですが、railsの概要をつかむにはプログラミング学習サービスのProgateで学習するのが個人的にはおすすめです。

ドットインストールでも無料で動画はみられるのですが、概要についてはあまり詳しく解説はされていないので、Progateで最初に学んでからドットインストールという順番がよいかとは思いますが、そこは人によるのであまり参考にならないかもしれません。

この記事はRailsの概要はちょっとつかめた感じというのが前提で、基本操作を主に書いています。

Railsの開発環境

開発環境はドットインストールの動画をみて構築。

  • Windows10
  • VirtualBox -v 5.2.2 仮想マシンを構築するために必要
  • Vagrant -v 2.2.0 仮想マシンを起動、停止したりするために必要
  • putty 立ち上がった仮想マシンにログインするために必要
  • Cyberduck 仮想マシンのファイルやディレクトリをGUIで表示する

Railsの操作方法

以下にRailsの操作方法を項目別に記載する。railsコマンドなどは仮想マシンがたちあがっている状態でかつ仮想マシンにログインしている状態で行います。(puttyで行う)。ドットインストールの開発環境構築をみれば、仮想マシンにインストールする作業もスクリプトで自動で行うので、何もトラブルがなければ数時間で開発環境構築ができます。

基本操作

rails new xxx #アプリケーションの作成
rails server -b ipアドレス -d #railsのサーバーを立ち上げる
ip a #ipアドレスを調べる
cat tmp/pids/server.pid #railsサーバーのプロセスを終了するための番号を調べる
kill -9 プロセス終了番号 #railsのサーバーを終了する
tail log/development.log #railsのログを参照する
  • ipアドレスを確認後 ipアドレス:3000 でアクセス(サーバーが立ち上がっていることを確認)

データベース関係

rails g model テーブル名 カラム名:データ型 #テーブルの作成
rails db:migrate #データベースの反映
rails dbconsole #データベースの確認(sqliteが立ち上がる。quitで終了)
rails console #railsのconsole
テーブル名.create #テーブルのインスタンス作成とsaveを同時に行う
rails db:migrate:reset #データベースを削除してまた新しい状態で作り直す
  • アプリケーション名/db/seeds.rb に直接Rubyを書き込むことでテーブルの初期データを作成できる
    $ rails db:seed でseeds.rbの内容を反映させる

モデル関係

モデルで使うメソッド

find() 指定したidのオブジェクトを返すfind(1)
find_by() find_by(カラム名:)で指定したカラム名のオブジェクトを返す
first データベースの最初のオブジェクトを返す
all データベースの全てのオブジェクトを返す
save 作成したモデルオブジェクトをデータベースに反映させる
create モデルオブジェトの作成からデータベースの反映までを一気に行う

ルーティング関係

rails routes #ルーティングの確認
  • resources :posts(postsはコントローラー名)
  • ルーティングに記述すると、よく使いそうなルーティングが一気に設定される

  • root “コントローラー名#アクション名” → ルートパスが設定される。
  • rootのurlを指定 → root_path

コントローラー関係

rails g controller コントローラー名(複数形) #コントローラーの作成
  • コントローラーを作成するとビューファイルも作成されるがアクションはコマンド入力時に指定しないと作成されない

そのほかビュー関係

画像リンクを作成する <%= link_to(image_tag("src"), url)%>
link_toヘルパーにクラスをつける <%= link_to("リンク名", "url", class: "")%>
  • Q.テキストが改行されないのですが
  • A.simple_fomatを追加しましょう

simple_formatは改行を適切なタグに変換してくれる

<p><%= simple_format @post.body%></p>

ヘルパー関係

link_to() リンクを作成する
image_tag() 画像リンクの作成
form_tag() フォームの送信
  • Q.確認メッセージを表示させたいです
  • A.data: {confirm: “メッセージ”}をlink_to()ヘルパーのオプションで指定する
<%= link_to("削除する", post_path(post), method: :delete, class: :command, data: {confirm: "本当に削除しますか?"})%>

CSS関係

  • Q.flash[:notice]のcssはどうやって設定すればいい?
  • A.flash[:notice]に直接cssを指定することできない
  • flash[:notice]にスタイルを付けたい場合はflash[:notice]をdivタグで囲いdivタグにスタイルをつける。

その他よくあるトラブル

  • Q.textareaタグのvalue属性が表示されないんですがどうしたらいいですか!
  • A.textareaにvalue属性はありません。
<textarea><%= hoge %></textarea> <!--このように書きます-->
  • Q.form_tag()ヘルパーでルーティングのURLを指定しているのにエラーがでる。
  • A.form_tag()ヘルパーでmethodを指定します。

ドットインストールのrails入門ではルーティングの設定を resouces というもので一気に作成します。form送信もform_tag()ではなくform_for()などを使います。(Progateと内容がすこし違うので少し混乱する)

エラーがでてもよくわからないときは、ブラウザでページのソースを確認することと、Railsドキュメントを参照してみるとエラーの解決につながりやすいと思います。

  • Q.link_to()ヘルパーでなみかっこを使うとエラーがでます
  • A.リファレンスを確認。なみかっこを使う場合はオプション全体をなみかっこで囲う

いろいろな書き方ができる

<%= link_to("削除する", post_path(post), {method: :delete, class: :command})%>

なみかっこをつけない

<%= link_to("削除する", post_path(post), method: :delete, class: :command)%>
:をつける場所が違う。ありがちなことに:をつける場所を間違えるというのがある。たとえば

validates: userは間違い。
validates :userとする

これだけの間違いでなんでエラーになっているのかわからず悩み続けることになる

railsコマンドが急に使えなくなった

とりあえずターミナルで spring stop とうってみる

Railsのログ

ログの確認方法

Railsのログはアプリケーション別に記録されるしくみみたい。場所は /log/development.log にある。ログはいろいろやっていると膨大な量になっているので、スクロールしないと一番最新のログがみれなくなる。それがいやな場合はログをクリアことができる。

ログの削除方法

ログを削除するにはコマンドで行う

rake log:clear

その他知っておくとよいこと

gemの確認はgem listで行う

gem list

gemfileをいじったらサーバーを再起動する
gemfileをいじったらってそのまま作業をすすめるとエラーにでくわすことがある。そのときは一旦サーバーを再起動する。その他にはひょっとすると画像を追加したときも同じことがいえるかもしれない

GUIでデータベースを確認する
仮想マシンからデータベースファイルをダウンロードしDBBrowserforSQLiteで開く。(もっといい方法があるかもしれない)
SQLiteのDBブラウザ
データベースファイルの場所: db/development.sqlite3(これはrailsアプリのパスです)

役に立つかもしれない記事

Railsコマンドをうつのがめんどくさいときはエイアリアスが便利です。↓
Railsコマンドのaliasを設定する方法を誰にでもわかるように書く | 初心者のプログラミング

ドットインストールのRails入門で躓いた場所を書いています。↓
ドットインストールのRubyOnRails入門で躓く場所 | 初心者のプログラミング