moxt

Just another Blog site

意識低いRuby on Rails再入門1

      2015/07/03

整理がてらメモ。

Ruby on Railsとは何か

ウェブアプリケーションを作るためのフレームワーク。

必要そうなモノ全部持ってる。

  • ルーティング
  • DB管理
  • アセット管理
  • ジョブキュー
  • メール送信
  • テスト
  • デバッグ機能(webconsole,irb,pry…)

ほぼ事足りちゃうと思うが、足りなかったら豊富なgemを落としてくれば良い。

慣れればウェブアプリが短期間でつくれてしまう。

はじめかた

rubyをインストール

rbenvを使う。

railsをインストール

バージョン4.2.1がインストールされた。

railsアプリを新規作成

アプリを起動

localhost:3000にアクセスして何か表示されたらおk。

Modelを作る

ティザーサイトでもない限りウェブアプリを作るなら何かしらデータベースを使ってデータを永続化する必要があるだろう。
まあ、テキストファイルでも良いんだけど。

localhost:3000にアクセスしたら日記のリストを表示したい、とか。ログイン画面を表示してユーザにログインさせたい、とか。何かやりたい事があるはず。

日記を例にすれば、日記のデータ一覧をデータベースから取得して、そのデータをもとにhtmlを生成して表示する必要がある。

RailsではMVCというフレームワークを採用している。

それぞれ

M:Model
V:View
C:Controller

という単語の頭文字を連結させたもの。

日記のデータはModelに該当する。
Modelのデータをもとにhtmlを生成している部分はViewに該当する。
Controllerはユーザから受けたリクエスト(localhost:3000に対してアクセスがきた、といった外部からの状況を監視してる)をもとに適切なModel、Viewを呼び出してhtmlなデータを返却する。いわば調整役である。

Modelはアプリの核。
これがないと何も始まらない。

というわけで、適当にModelを作ってみる。

たったこれだけ。
ItemというModelができあがった。
Itemはtitleとbodyを持っている。
日記であればタイトルと本文といったところ。

何やら色々なファイルが生成されているようだ。

app/models/item.rb

これがModel。

db/migrate/20150330124730_create_items.rb

Migrateファイルとよばれるもの。
あとで書くmigrateコマンドを実行することでデータベース上にテーブルを作ったり消したり、カラムを追加してくれたりする。

test/models/item_test.rb

テストファイル
Itemクラスの中になんかしらのメソッドを追加したとき、そのメソッドが期待通りに動くかどうか確認するために使う。
メソッドを追加してわざわざその動作を確認するなんて面倒だ。
仕様変更によって今までまともに動作していたメソッドが正しく動かなくなった=バグを検知するためにも有用だったりする。バグは早く検知できたほうが良いよね。

test/fixtures/items.yml

フィクスチャーファイル
Itemクラスのテストをするとき実際DBに入ってる値に対して破壊的操作(値をアップデートしたり、消したりとか)してたらDBの状態がテストを実行するたびに変化してしまう。
何が困るって、ソースコード変更してないのにテストが成功したり失敗したりと不安定な状態になることだ。
これではテストの意味が全くない。
なので、テスト用に偽物のデータを使い開発環境のDBの状態を変化させないようにする。
この偽物のデータがフィクスチャーファイル。

Migrationする

generateコマンドでModelを作成した。
この状態ではまだDB上にテーブルが存在しない。
アプリケーション上にModelが存在しても、永続化するDBにそのModelを受ける皿が無い。
migirateコマンドを実行してDB上にテーブルを作成する。

実行結果はこんな感じ。

Itemクラスのデータを作ってみる

これでDB上にテーブルができた。
まだデータが存在しない。

直接DBのクライアントを起動してINSERTナントカしても良い。
railsにはconsoleという機能がある。

Item.connectionを実行して。。。

これでItemのデータが1つ作成された。

次はこのデータをブラウザ上で表示させてみたい。

 - プログラミング

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

  関連記事

no image
NginxとPHP-FPMを使っていたらcurl_init()が無いとエラーが出た

参考リンク 解決策 …

no image
単語の出現頻度をlinuxコマンドだけで調べたい

無駄にpythonとか使おうとしてた。。 楽にできて良かった。 …

no image
Toolbarで表示する矢印アイコンの色を変えたい

http://stackoverflow.com/questions/26788464/how-to-change-color-of-the-back-arrow-in-the-new-material-theme 動的に色を変えるイイカンジな方法が分からず困っていた。 …

large_v
Docker Machineのメモ

随時追記する Contents1 …

no image
Androidアプリを実機デバッグしたいのにNo debuggable applicationsと表示される時の対処例

Tools > …

images
scrapy実行時のエラー対処

Macで発生した。 scrapyを実行したら下記のようなエラーを吐いた。 …

no image
Python(Anaconda)とOpenCVを使って動画から顔画像を抽出してみる

今話題のディープラーニングをやってみたい。 いろいろ見た感じCaffeというフレームワークが良さそう。 …

no image
意識低いRuby on Rails再入門6 ~ログイン必須のControllerを作りたい~

ログイン状態を取得するためのSessionsHelperを前に書いた 新規投稿画面を表示したり、実際に投稿するときにはログイン必須であることを保証したい。 …

no image
Swiftで追加したサードパーティなモジュールを更新する方法

SwiftにはCocoaPodsのようなライブラリを管理するツールがないので、手で追加します。 手で追加したライブラリのバージョンを更新したいときどうすればよいか。 …

300px-Ruby_logo
nokogiriでスクレイピングするときによく忘れるヤツ集

書くことで記憶を定着させる施術。 class,id以外の属性を指定してタグを探したい …