好きなものだけ書く。ポジティブに。

好きなことを楽しく。プログラミング、写真、音楽、ガジェットとか。

【2022年版】今更ちゃんとRuby on Railsをキャッチアップしてみる。ついでに最新Ruby on Rails ver 7.0.0で!

おつかれさまです!のぶじゃすです。

今回はRuby on Railsの新規バージョン7.0.0が2021/12/15にリリースされたので、キャッチアップもかねて学習していこうと思います。

私は Ruby on Rails (以下Rails)を使っている会社に勤めているのですが、普段はSalesforce開発が主なので普段は全くと言っていいほどRailsに触れていません。先日偶然バージョン7が出たというツイートを見たのでスキマタイムで何かしらWebサービスを作る所までキャッチアップしていこうかなと思います。

対象読者

今回はそもそもの基本をやっていきます。

  • Ruby on Railsはほとんど触ったことない
  • プログラミングはざっくり分かる
  • なにか作ってみたい

という人むけに書いていきます。分かりづらい事などありましたらコメント頂けたら嬉しいです。

「読者」とか書きましたが今回は動画です

Ruby on Rails キャッチアップ動画を作成してみました。この動画を見ていただければ全部わかります。是非ご覧ください!

www.youtube.com

細かい説明や補足などを以下にテキストとして記載しています。

今後キャッチアップしていきたいこと

  • 体重削除機能を作る
  • 誕生日から年齢を計算して表示する
  • heroku に deploy して世界中からアクセス可能に
  • フォントを綺麗にする
  • firebase でログイン機能を作る
  • localeを設定してみる

撮影中にググったサイト紹介

action_text のミスで調べたサイト

blog.alea12.net

dependent オプション

qiita.com

本番で見ていた台本はこちら

本番はこんな台本を見ながら撮影していました。よく左側をみているのはこれですw

$ rails new demo
$ cd demo
$ rails g scaffold rabbit name:string birthday:date description:text
$ code .
# migration
# model
# controller
# view/index
$ rails db:migrate
$ rails s
# /rabbits
@application.html.erb
<link rel="stylesheet" href="https://cdn.simplecss.org/simple.min.css">
# /rabbits.json
# controller
@models/rabbits.rb
validates_presence_of :name, :birthday
$ rails c
>> Rabbit.first
>> Rabbit.create! name: 'aaaa'
$ rails action_text:install
$ bundle
$ rails db:migrate
@ models/rabbits.rb
has_rich_text :description
# create rabbit demo
$ ./bin/importmap pin local-time
@ application.js
import LocalTime from "local-time"
LocalTime.start()
@ _rabbit.html.erb
<p>Weights <%= time_tag rabbit.created_at, "data": {"local": "time-ago"} %></p>
$ ./bin/importmap pin local-time --download
$ rails g resource weight rabbit:references gram:integer note:string 
$ rails db:migrate
>> Rabbit.first.weights
@ models/rabbit.rb
has_may :weights
>> reload!
>> Rabbit.first.weights
>> Rabbit.first.weights.create! gram:1000
@ rabbits/show.html.erb
<%= render "rabbits /weights", rabbit: @rabbit %>
@ rabbits/_weights.html.erb
<h2>Weights<h2>

<div id="weights">
  <%= render rabbit.weights %>
</div>

<%= render "weights/new", rabbit: rabbit %>
@ weights/_weight.html.erb
<div id="<%= dom_id(weight) %>">
  <%= l(weight.create_at %>: <%= weight.gram.to_formatted_s(:delimited) %> g
</div>
@weights/_new.html.erb
<%= form_with model: [ rabbit, Weight.new ] do |form| %>
  <div>
    <%= form.number_field :gram %>g<br>
    <%= form.submit %>
  </div>
<% end %>
@rabbits/_rabbit.html.erb
<p>体重を記録した回数: <strong><%= rabbit.weights.count %>回</strong>
@weights_controller.rb
  before_action :set_rabbit

  def create
    @rabbit.weights.create! params.required(:weight).permit(:gram)
    redirect_to @rabbit
  end

  private

  def set_rabbit
    @rabbit = Rabbit.find(params[:rabbit_id])
  end
@routes.rb
  resources :rabbits do
    resources :weights
  end
# create weight demo
# turbo stream demo
@rabbit/show.html.erb
<%= turbo_stream_from @rabbit %>
@models/weights.rb
broadcasts_to :post
# live refresh demo
$ rails c
>> Rabbit.find(1).weights.last.destroy
>> Rabbit.find(1).weights.last.update! weight: 2000
$ rails test
dependent: :destroy 

Raills7いいぞ。JavaScriptの事考える時間がめっちゃ減る

いくつか動画外でもさわっていて、Rails7めっちゃ楽しいです。フロントエンドの事を考えなくていいのでかなり快適。 機能の開発に時間を注げる感じです。

今後もキャッチアップしつつBLOG, 動画出していきたいと思っています。

よいRails7ライフを!