LoginSignup
0
0

More than 5 years have passed since last update.

Ruby on rails もくもく会@渋谷に参加させていただきました

Posted at

こちらの勉強会に参加させていただきましたので成果発表に使います。
お菓子とかいっぱいいただいちゃいました。ごめんなさい。

やったこと

具体的な成果

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

画面が表示された。

ルーティングについてちょっと見てみる。

config/routes.rb
  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

追記
以下のようにルーティングを記述することも可能。

config/routes.rb
get 'static_pages/home'

GETでstatic_page/homeにアクセスしたときに、staticPageControllerのhomeメソッドにアクセスする。

Laravelで書くのと同じだなー。って思ってました。

routes/web.php
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

config/database.yml
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するときに落ちるのかは知らない。

app/models/micropost.rb
validates :content, length:{maximum: 140}

リレーションの定義

Laravelと同じでModelでリレーションを定義する。
1対多のリレーション。

app/models/user.rb
has_many :micropost
app/models/micropst.rb
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">

おわりに

本イベントを主催していただいたスタートアップテクノロジーの方々、ありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0