Rails Tutorial time attack!!!
質を担保しつつ、スピードを意識して、これやる
ver6はこっち
gem 'capybara', '>= 2.15'
最新バージョンのcapybara gemがインストールされます(これはテストで使うgemです)。極端に言えば、バージョンが7.2であっても、2.15と同じかそれより上のバージョンならインストールされます 。
gem 'rails', '~> 6.0.3'
このように指定すると、rails gemのバージョンが6.0.3と同じかそれより上であり、かつ6.1より小さい場合にインストールされます。つまり、~> 6.0.3という記法ではマイナーバージョンの部分に相当するアップデート済みのgemをインストールします
Model-View-Controller(MVC)
ブラウザがRailsアプリと通信する際、一般的にWebサーバーにリクエスト(request)を送信し、これはリクエストを処理する役割を担っているRailsのコントローラ(controller)に渡されます。コントローラは、場合によってはすぐにビュー(view)を生成してHTMLをブラウザに送り返します。動的なサイトでは、一般にコントローラは(ユーザーなどの)サイトの要素を表しており、データベースとの通信を担当しているRubyのオブジェクトであるモデル(model) と対話します。モデルを呼び出した後、コントローラは、ビューを描画し、完成したWebページをHTMLとしてブラウザに返します。
ルーターはコントローラとブラウザの間に配置
bundle install --without production
gemは本番環境でしか使わないので、このフラグを追加したコマンドを実行してもローカル環境には本番用gemは反映されません。
実行し、Gemfile.lockに反映させないと、本番環境へのデプロイで失敗してしまうためです。
herokuへのdeployでつまづいたときの解決方法
error message
Failed to install gems via Bundler.
- herokuで利用しているbundlerのバージョンと合わせる
- プラットフォーム関連のwarningが出てたらそれを実行
- リポジトリのサブディレクトリを指定してdeploy
bundler -v
gem uninstall bundler
gem install bundler -v 2.2.16
rm gemfile.lock
bundle _2.2.16_ install
bundle loc --add-platform x86_64-linux
cd ../
git subtree push --prefix <directory_name>/ heroku main
gemfile.lockの変更をpushするのを忘れずにやる
git commit -a -m "Update gemfile.lock for heroku"
参考
1章終わり 3h
一つのリポジトリのサブディレクトリごとに別々のrails appを管理する場合
rm -rf .git
をrails newで作成したディレクトリ内で行う。
herokuのpush先は、コマンドでurlを取得後、
そのurlに切り替えてからpush
heroku create
git remote set-url heroku <url>
rails MVC
2章 2h
Command
rails
bundle install --without production
rails generate controller StaticPages home help
rails destroy controller StaticPages home help
rails generate model User name:string email:string
rails destroy model User
rails db:migrate
rails db:rollback
rails db:migrate VERSION=0
rails console
heroku
heroku create
heroku logs # 直近のイベントを表示する
heroku logs --tail # イベント発生のたびに自動表示する(Ctrl-Cで終了)
git
git checkout -b <branch_nane>
git push -u origin <branch_nane>
git checkout main
git merge <branch_nane>
guard
bundle exec guard init
bundle exec guard
bin/spring stop # テストが原因不明で動かなくなったら、このコマンドを実行してみる
bundle exec guard
あとで読む
rails testでエラー解決
rails test実行後、capybaraでエラー
/Users/<user_name>/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/capybara-3.28.0/lib/capybara/selector/filters/node_filter.rb:9:in `initialize': wrong number of arguments (given 4, expected 3) (ArgumentError)
...
下記を参考にgemのアップデート、バージョン指定を一旦消した
別のエラー
/Users/<user_name>/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/bootsnap-1.7.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:34:in `require': cannot load such file -- rexml/document (LoadError)
ここを参考に rexml
を追加
ruby 3系から必要なgemっぽい.
これで動いた
3章 2h
4章 js と違うところ
a = [42, 8, 17]
puts a[-1]
#print 17
a.sort #[8, 17, 42]
a #[42, 8, 17]
a.sort! #[8, 17, 42]
a #[8, 17, 42]
a.push(6)
a << 6 #a.push(6)と同じ
a << 6 << 6 #a.push(6)を2回行う
###
x = "foo"
y = ""
puts "Both strings are empty" if x.empty? && y.empty?
#print "One of the strings is empty"
#Rubyでは、メソッドがtrueまたはfalseという論理値(boolean)を返すことを、末尾の疑問符で示す慣習があります。
###範囲
>> a = %w[foo bar baz quux] # %wを使って文字列の配列に変換
=> ["foo", "bar", "baz", "quux"]
>> a[0..2]
=> ["foo", "bar", "baz"]
>> a[2..-1] # 添字に-1を使って選択
=> ["foo", "bar", "baz", "quux"]
>> ('a'..'e').to_a
=> ["a", "b", "c", "d", "e"]
(1..5).each { |i| puts 2 * i }
↕︎
(1..5).each do |i|
puts 2 * i
end
↕︎
[...Array(5).keys()].map(v=>v+1).forEach(i=>console.log(i*2))
// mapとforEachはいっぺんにまとめられるがあえて
result
2
4
6
8
10
>> 3.times { puts "Betelgeuse!" } # 3.timesではブロックに変数を使っていない
"Betelgeuse!"
"Betelgeuse!"
"Betelgeuse!"
=> 3
>> (1..5).map { |i| i**2 } # 「**」記法は冪乗 (べき乗)
=> [1, 4, 9, 16, 25]
>> %w[a b c] # %w で文字列の配列を作成
=> ["a", "b", "c"]
>> %w[a b c].map { |char| char.upcase }
=> ["A", "B", "C"]
>> %w[A B C].map { |char| char.downcase }
=> ["a", "b", "c"]
>> %w[A B C].map(&:downcase)
=> ["a", "b", "c"]
>> user = { "first_name" => "Michael", "last_name" => "Hartl" }
=> {"last_name"=>"Hartl", "first_name"=>"Michael"}
# ↓のようにシンボルを使うのが一般的
```ruby
>> user = { :name => "Michael Hartl", :email => "michael@example.com" }
=> {:name=>"Michael Hartl", :email=>"michael@example.com"}
>> user[:name] # :name に対応する値にアクセスする
=> "Michael Hartl"
>> user[:password] # 未定義のキーに対応する値にアクセスする
=> nil
>> h1 = { :name => "Michael Hartl", :email => "michael@example.com" }
=> {:name=>"Michael Hartl", :email=>"michael@example.com"}
>> h2 = { name: "Michael Hartl", email: "michael@example.com" }
=> {:name=>"Michael Hartl", :email=>"michael@example.com"}
>> h1 == h2
=> true
>> puts (1..5).to_a # 配列を文字列として出力
1
2
3
4
5
>> puts (1..5).to_a.inspect # 配列のリテラルを出力
[1, 2, 3, 4, 5]
>> puts :name, :name.inspect
name
:name
>> puts "It worked!", "It worked!".inspect
It worked!
"It worked!"
>> p :name # 'puts :name.inspect' と同じ
:name
<%= stylesheet_link_tag 'application', media: 'all',
'data-turbolinks-track': 'reload' %>
# メソッド呼び出しの丸カッコは省略可能。
<%= stylesheet_link_tag('application', media: 'all',
'data-turbolinks-track': 'reload') %>
# 最後の引数がハッシュの場合、波カッコは省略可能。
<%= stylesheet_link_tag 'application', { media: 'all',
'data-turbolinks-track': 'reload' } %>
result
<link rel="stylesheet" media="all" href="/assets/application.self-
f0d704deea029cf000697e2c0181ec173a1b474645466ed843eb5ee7bb215794.css?body=1"
data-turbolinks-track="reload" />
4章終わり 2h
rubyの記法満載だった。
この章は覚えるというよりかはチートシート的に使ったほうが良さそう