😀

【初めてのRails4】 CRUDをまとめて作る rails g scaffold

2022/11/28に公開約6,200字

Ruby on Railsを触ることになったので、Ruby on Rails チュートリアルを参考にしながら作成記録のメモ

環境

  • CentOS6.4
  • Rails 4.0.4

事前準備に必要なもの

参考にしたサイト

とりあえずユーザー一覧は必要でしょ

こんな事やったら途中で設計ミスで死ぬパターンになるんですかね???

とりあえず練習として

  • name (ユーザー名)
  • email (メールアドレス)

の2つでもあればいいか。。。。

まあいいかとりあえず作ってみよう

と適当にやっていきます。

アプリケーションに必要なコントローラ、モデル、ビューをまとめて生成(rails generate scaffold)

Railsドキュメント#アプリケーションに必要なコントローラ、モデル、ビューをまとめて生成(rails generate scaffold)を読んでとりあえず作成してみます。

【注意】命名規則について

Ruby on Rails チュートリアル#第2章デモアプリケーション#2.4最後にの注意事項に書かれていますが

scaffoldにおける命名は、モデル名の命名の習慣に従っています。リソースやコントローラは複数形で表し、モデルは単数形で表すのが普通です。UsersではなくUserとしたのはこのためです。

と書かれていますので単数形、複数形の取り扱いには気をつけましょう。scaffoldコマンドCamelケースの単数形で実行すると自動的にモデルは単数形、コントローラー、Viewは複数形にしてくれます。

上記を踏まえた上でまずはドライランオプションで作られるMVCを確認

-p がドライランモードです

/path/to/hoge/{プロジェクト名}
rails g scaffold User name:string email:string -p

      invoke  active_record
      create    db/migrate/20140402113547_create_users.rb
      create    app/models/user.rb
      invoke    rspec
      create      spec/models/user_spec.rb
      invoke  resource_route
       route    resources :users
      invoke  scaffold_controller
      create    app/controllers/users_controller.rb
      invoke    erb
      create      app/views/users
      create      app/views/users/index.html.erb
      create      app/views/users/edit.html.erb
      create      app/views/users/show.html.erb
      create      app/views/users/new.html.erb
      create      app/views/users/_form.html.erb
      invoke    rspec
      create      spec/controllers/users_controller_spec.rb
      create      spec/views/users/edit.html.erb_spec.rb
      create      spec/views/users/index.html.erb_spec.rb
      create      spec/views/users/new.html.erb_spec.rb
      create      spec/views/users/show.html.erb_spec.rb
      create      spec/routing/users_routing_spec.rb
      invoke      rspec
      create        spec/requests/users_spec.rb
      invoke    helper
      create      app/helpers/users_helper.rb
      invoke      rspec
      create        spec/helpers/users_helper_spec.rb
      invoke    jbuilder
      create      app/views/users
      create      app/views/users/index.json.jbuilder
      create      app/views/users/show.json.jbuilder
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/users.js.coffee
      invoke    scss
      create      app/assets/stylesheets/users.css.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.css.scss

問題がなければ、ドライランオプションを外して作りましょう

/path/to/hoge/{プロジェクト名}
rails g scaffold User name:string email:string

プロジェクト用のDBを作成する

rake db:create

migrateを実行する

マイグレーション分からない方はRailsドキュメント#マイグレーションとはを一読してください

/path/to/hoge
rake db:migrate

== 20140402113618 CreateUsers: migrating ======================================
-- create_table(:users)
   -> 0.0082s
== 20140402113618 CreateUsers: migrated (0.0083s) =============================

作成されたテーブルの確認

確認しましょう

/path/to/hoge
mysql -u{ユーザー名} -p -e "use rpanda_development; show tables;"
+------------------------------+
| Tables_in_rpanda_development |
+------------------------------+
| schema_migrations            |
| users                        |
+------------------------------+

usersというテーブルができています

railsサーバーを起動する

railsに搭載されているサーバーを起動しましょう。簡単です。

/path/to/hoge/{プロジェクト名}
#sはserverの略
rails s

=> Booting WEBrick
=> Rails 4.0.4 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2014-04-02 20:40:06] INFO  WEBrick 1.3.1
[2014-04-02 20:40:06] INFO  ruby 2.0.0 (2013-11-22) [x86_64-linux]
[2014-04-02 20:40:06] INFO  WEBrick::HTTPServer#start: pid=22345 port=3000

portが3000番で起動していますね。

portが開いているか確認する

自分はVagrantで作成したvirtualboxで作成をしています。でよく忘れがちなのがportを開いておらず、ホストOS側から見れない現象です。

自分のメモ用に残しておきます

/etc/sysconfig/iptables
 Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
#これ追加
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

iptablesの再起動

/path/to/hoge
sudo /etc/init.d/iptables restart

ブラウザで見れるか確認

自分のゲストOS側のIPアドレスは192.168.56.103なので確認します

http://192.168.56.103:3000/users

Listing usersと表示されていたらOKです。

Discussion

ログインするとコメントできます