Ruby
Rails

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

More than 3 years have passed since last update.

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です。