昔に勉強したけど、その後全然使ってないのでさっぱり忘れたのでまたやり直し。ちょっとまともなウェブアプリを作ってみたい。
参考にしたサイトは、Ruby on Rails 4入門 (全28回) - プログラミングならドットインストール。今はRailsのバージョンが4になっているようだ。
Railsの哲学
- DRY (Don’t Repeat Yourself) コードの繰り返しを避ける
- CoC (Convention over Configuration) 設定より規約
プロジェクトの生成
$ rails new <アプリケーション名> --skip-bundle |
→ブラウザで http://localhost:3000/ を見ると、Railsのテンプレート画面が表示される
Scaffoldでモデル作成
$ rails generate scaffold User name:string score:integer |
http://localhost:3000/users で、ユーザの一覧画面が見れるようになる。 ユーザを追加・編集・削除できる(何も書いてないのに!)。
手動でモデル作成
scaffoldを使うとモデル・ビュー・コントローラを自動的に作ってくれるけど、個別にも作れる。
$ rails generate model Project title:string |
generate
はg
という短縮形でok- カラムのデフォルトの型が文字列なので、
:string
は省略可能 - モデルの名前は単数形で、先頭を大文字にする
使えるコマンド
$ rails db |
.schema
,select * from projects;
など、SQLを使ってモデルを確認できる
$ rails console |
モデル作成のテストなどがインタラクティブにできる
コントローラの作成
$ rails g controller Projects |
- コントローラの名前は複数形
config/routes.rb に、
resources :projects |
を足す。
$ rake routes |
で、ルーティングの確認ができる
Prefix Verb URI Pattern Controller#Action |
コントローラのアクションを追加
- app/controllers/projects_controller.rb に、
index
メソッドを追加し、 app/views/projects/index.html.erb にビューを記述する - アクションでインスタンス変数(
@projects
)に格納すれば、ビューの中でそれにアクセスできる
ホームページの変更
routes.rbを書き換えることで、変更できる
root 'projects#index' |
全体で共通のhtmlの編集
app/views/layouts/application.html.erb
<%= image_tag '画像ファイル名' %> |
で画像が貼れる。画像のファイルは、app/assets/images/ に入れる。
<%= link_to 'テキスト', '/' %> |
でリンクを貼れる。
projects_path
, new_project_path
, edit_project_path
など、アクションとモデル名+_pathで、コントローラのアクションを起動するにリンクを貼れる。
プロジェクトの個別ページの表示
Projects#indexから
link_to project.title, project_path(project.id) |
でリンクを貼って、Projects#show
で個別ページを表示する
params
にクエリ文字列が入っていて、params[:id]
でIDを取得できるので、
Project.find(id)
でモデルを取得できる。
新規フォームを作ろう
form_for
でフォームを生成すると、テキストフィールドなどとモデルのカラムが自動的に関連される。
<%= form_for @project do |f| %> |
データを保存してみよう
Submitボタンを押したときに Projects#create に飛んでくる。
セキュリティの理由から、params[:project].permit(:title)
で許可したパラメータだけを使って新しいプロジェクトを追加する。
Validationの追加とエラーメッセージの表示 model
に validates :title, ...
と条件を記述すると、コントローラから @project.save
とした時に false
が返るので、それを見て条件分岐をする。
削除
Projects#destroy
メソッドを追加する
before_action only:
で指定のアクションに対してだけ、なにか共通の動作をさせることができる
感想
今回は環境のセットアップや各ステップでも全然つまづかなかった。以前Railsのチュートリアルを試した時にはもうあらゆるところで、ウェブにある情報を試しても動かないことが多かったんだけど、そういう意味ではRailsも枯れてきたのかな?