学習記録

2020-02-09に作成

個人用の学習記録。成果がなくとも毎日更新。

所有者限定モードのためこのボードには投稿できません ボードとは?

Railsチュートリアルの勉強中。

10.3.2 サンプルのユーザー

調べたこと

create!メソッドとはcreateと何が違うのか。
チュートリアルには「create!は基本的にcreateメソッドと同じものですが、ユーザーが無効な場合にfalseを返すのではなく例外を発生させる (6.1.4) 点が異なります。」とあるが、実際に調べた。

create!で調べると複数候補が出る。
 https://api.rubyonrails.org/
複数候補が出たのでメソッドの定義元を知りたいが、
調べ方がわからない。

source_locationメソッドを使えば定義元がわかるらしい。

実際に実行すると下記の結果が得られた。

irb(main):003:0> User.method(:create!).source_location
=> ["/Users/user/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/activerecord-5.2.4.2/lib/active_record/persistence.rb", 48]

上の結果には「persistence.rb」とあるので下記のURLを参考にしてみる。
https://api.rubyonrails.org/classes/ActiveRecord/Persistence/ClassMethods.html#method-i-create-21

先のURLには「Raises a RecordInvalid error if validations fail, unlike Base#create.」とあるので、create!とcreateの違いは例外を出すか出さないかという点だろうか。


Railsチュートリアル進捗

10.2.3 フレンドリーフォワーディング

つまずき

「リスト 10.32」でuserローカル変数が使われているが、9章の演習でassignを使うために@userインスタンス変数として書いていたことを忘れていた。

Progate進捗

今は「Ruby on Rails5 学習コース VIII-9」を勉強中。


Railsチュートリアルの勉強中。

10.1.1 編集フォーム

演習にはnoopenerを書くべきとあるが、
MDNの参照先を辿ってみるとnoreferrerも書くべきとある。


Railsチュートリアルの勉強中。

9.3.2 [Remember me] をテストする

テストの分岐にraiseを仕込んでみて、例外が発生しないならそこの分岐は網羅できていない。

assert_equalの引数は(期待する値, 実際の値)の順で与える。

つまずき

if文の評価結果が返り値になることを知らなかった。

参照:
if 式は、条件が成立した節(あるいは else 節)の最後に評価した式の結果を返します。else 節がなくいずれの条件も成り立たなければ nil を返します。


Railsチュートリアルの勉強中。

9.3.1 [Remember me] ボックスをテストする

統合テストではセッションを扱うことができないらしい。
セッションのテストは単体レベルで保証し、統合テストではブラックボックスとしてテストすべきという考えだろうか。
参考: The session is an internal structure for the controller. Integration test is more black box than controller tests were.


Railsチュートリアルの勉強中。

9.1.2 ログイン状態の保持

下記が==演算子を再定義している箇所だと思われる。
https://github.com/codahale/bcrypt-ruby/blob/master/lib/bcrypt/password.rb#L64

    # Compares a potential secret against the hash. Returns true if the secret is the original secret, false otherwise.
    def ==(secret)
      super(BCrypt::Engine.hash_secret(secret, @salt))
    end
    alias_method :is_password?, :==

Railsチュートリアル - 8.3 ログアウトを勉強中。

つまずき1

演習8.3.2に「cookiesの内容を調べ、sessionが正常に削除されていることを確認」とあるが、
cookiesに設定された値が変わることしか確認できない。

参考にした情報


Railsチュートリアル勉強中。

7.5.2 本番環境用のWebサーバー

これまで使っていたWEBrickに比べ、Pumaの方が大量のリクエストを捌く能力があるのでPumaに切り替える。
PumaをGemfileに追記する必要はないが、puma.rbに設定が必要となる。

Githubからvulnerability alertメールが来たので対応してみた

gem 'rails',        '~> 5.2.4.2'
gem 'bootstrap-sass','3.4.1'
gem 'puma',         '3.12.4'

Rails チュートリアルの勉強中。

6.3.4 ユーザーの作成と認証

コンソールからcreateメソッドを実行し、レコードを保存する。
ハッシュ化されたパスワードを確認する。
authenticateメソッドを使ってみる。

演習

update_attributeメソッドで値を更新する。
update_attributesと間違えてしまったので注意。

erbファイルの編集時、VSCodeに補完して欲しい

Emmet補完というらしく、下記のURLを参考にして実現できた。
https://teratail.com/questions/163008

フォーマットについては下記を参考にした。
https://stackoverflow.com/questions/41051423/how-do-i-auto-format-ruby-or-erb-files-in-vs-code


Railsチュートリアルを勉強中。

6.3.2 ユーザーがセキュアなパスワードを持っている

つまづいた点

has_secure_passwordを追加すると、"test_should_be_valid"の結果がFAILを返すようになることに気づかなかった。
調査に余計な時間を割いてしまった。


4.3.4 CSS、再び
章題がCSSだが、主な内容はメソッドの構文について。
以下、メソッドの構文について。
- メソッド呼び出しの丸括弧parenthesesは省略可能。
- 最後の引数がハッシュの場合、波括弧bracesを省略可能。
- 改行と空白を区別していない。

なおstylesheet_link_tagは下記のタグを生成するのに使われている。

<link rel="stylesheet" media="all" href="/assets/static_pages.self-brahbrah.css?body=1" data-turbolinks-track="reload">
<link rel="stylesheet" media="all" href="/assets/application.self-brahbrah.css?body=1" data-turbolinks-track="reload">

Rails チュートリアル勉強中。

3.3.2 Red

失敗するテストを書く(この後にコードを書いてテストを成功させる)。
ここではaboutページを作る前にテストを書く。

3.6.2 Guardによるテストの自動化

Guardを使ってテストを自動化する。
Guardはファイルの変更を監視し、自動でテストを実行してくれる。

つまずいた点

Guardfileにwatchの対象を書かないと自動でテストされない。
https://github.com/guard/guard/issues/357


Railsチュートリアルで勉強中。

3.2 静的ページ

動的なページを作り始める前に、静的なHTMLのみのページを作成。
この時masterには直接コミットせずに、その都度でブランチにコミットする。

$ git checkout -b static-pages

Rails チュートリアルの勉強中。
scaffold機能を使い、ルーティングからMVCまでを生成させた。

Formatterを入れてみた

Formatterを何でも良いので入れたくなったが、Gemfileに書くものなのだろうか。
VSCodeのExtensionからRubyをInstallした後、Settingsのruby.formatにrubocopを指定。
group :development doの下に 'rubocop'を追加した。
ターミナルでbundle installを実行した後だけvscode上で使えるようだ(パスの問題だろうか)。

コメント「frozen_string_literal」が気になった

Rubocopでフォーマットしたところ、下記の一文が追加された。

# frozen_string_literal: true

これはマジックコメントと呼ばれ、「デフォルトでStringを変更不可にする」ことを指している。
参考:https://teratail.com/questions/74592


Rails Tutorialの勉強中(1.4.3 Bitbucket)
ローカルのリポジトリをリモートにプッシュした。

binディレクトリ下はgitignoreに追記するのかと思ったが、Herokuに必要だからという理由でソース管理に追加するらしい。