こちらの勉強会に参加させていただきましたので成果発表に使います。
お菓子とかいっぱいいただいちゃいました。ごめんなさい。
やったこと
- rails tutorialを進める
具体的な成果
scaffold便利
controller, modelをちょこちょこ作るのをまとめてくれてるのかな。
Laravelにも欲しい。
artisanコマンドに追加するライブラリ作ってみようかな。
rails generate scaffold User name:string email:string
なんか色々スケルトンを作ってくれた?
Running via Spring preloader in process 72614
invoke active_record
create db/migrate/20171111061119_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
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 test_unit
create test/controllers/users_controller_test.rb
invoke helper
create app/helpers/users_helper.rb
invoke test_unit
invoke jbuilder
create app/views/users/index.json.jbuilder
create app/views/users/show.json.jbuilder
create app/views/users/_user.json.jbuilder
invoke test_unit
create test/system/users_test.rb
invoke assets
invoke coffee
create app/assets/javascripts/users.coffee
invoke scss
create app/assets/stylesheets/users.scss
invoke scss
create app/assets/stylesheets/scaffolds.scss
以下のURLにアクセス
http://localhost:3000/users
画面が表示された。
ルーティングについてちょっと見てみる。
resources :users
resourcefulルーティングが追加されてるっぽい。
具体的には、rake routes
で確認できる。
Prefix Verb URI Pattern Controller#Action
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
root GET / users#index
追記
以下のようにルーティングを記述することも可能。
get 'static_pages/home'
GETでstatic_page/homeにアクセスしたときに、staticPageControllerのhomeメソッドにアクセスする。
Laravelで書くのと同じだなー。って思ってました。
Route::get('static_page/home', 'staticPageController@home');
railsのアプリケーションで使用するDBをsqliteから変更する
そもそもプロジェクトをnewするときに以下のように実行すればmysqlになる。
rails new [アプリ名] -d mysql
PostgreSqlは依存パッケージがあるのでちょっと面倒?もしかしたら以下でいけるかも。(試してないです、ごめんなさい)
rails new [アプリ名] -d postgresql
後から変更したいときはapp/config/database.yml
を以下のように変更する。
ユーザーは必要ならば作成する。
パッケージがないならgemfile
に追記して、bundle update
。
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: [アプリ名]_development
pool: 5
username: root
password:
host: localhost
test:
adapter: mysql2
encoding: utf8
reconnect: false
database: [アプリ名]_test
pool: 5
username: root
password:
host: localhost
production:
adapter: mysql2
encoding: utf8
reconnect: false
database: [アプリ名]_production
pool: 5
username: root
password:
host: localhost
Active Record
LaravelのEloquentとほぼ同じなのでまぁいいか。という感じ。
生のSQLを書けるのかとかは知らない。
バリデーションロジックの追加
Modelオブジェクトにvalidationの責務を持たせる。
プロパティを設定するときに落ちるのか、newするときに落ちるのかは知らない。
validates :content, length:{maximum: 140}
リレーションの定義
Laravelと同じでModelでリレーションを定義する。
1対多のリレーション。
has_many :micropost
belongs_to :user
リレーションを定義しておくと、以下のようにオブジェクトチェーンできる。
>>> first_user = User.first
User Load (0.7ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]]
=> #<User id: 1, name: "[name]", email: "[mail]", created_at: "2017-11-11 06:54:54", updated_at: "2017-11-11 06:54:54">
first_user.micropst
>>> first_user.micropost
=> #<ActiveRecord::Associations::CollectionProxy [#<Micropost id: 1,
Micropost Load (0.2ms) SELECT "microposts".* FROM "microposts" WHERE "microposts"."user_id" = ? LIMIT ? [["user_id", 1], ["LIMIT", 11]]
=> #<ActiveRecord::Associations::CollectionProxy [#<Micropost id: 1, content: "12345678901234567890123456789012345678901234567890...", user_id: 1, created_at: "2017-11-11 07:47:46", updated_at: "2017-11-11 07:47:46">]>
>>> first_user.micropost.first
Micropost Load (0.2ms) SELECT "microposts".* FROM "microposts" WHERE "microposts"."user_id" = ? ORDER BY "microposts"."id" ASC LIMIT ? [["user_id", 1], ["LIMIT", 1]]
=> #<Micropost id: 1, content: "12345678901234567890123456789012345678901234567890...", user_id: 1, created_at: "2017-11-11 07:47:46", updated_at: "2017-11-11 07:47:46">
おわりに
本イベントを主催していただいたスタートアップテクノロジーの方々、ありがとうございました。