CGI.escapteすると半角スペースは%20になると予想していたが、予想に反して+が返って来た。
Content-Typeにapplication/x-www-form-urlencodedを指定した場合、+として表さないといけないらしい。
参考:
- https://qiita.com/YamKenta/items/76bd5596bdcd59eceaf3
- https://developer.mozilla.org/ja/docs/Web/HTTP/Methods/POST
development環境の設定値を変えたが、何に関する設定をしているのか調べた。
railsガイドを参考に下記のことがわかった
- raise_delivery_errors=true
- メール配信に失敗した場合にエラーを発生させる
- delivery_method = :test
- メールを配列ActionMailer::Base.deliveriesに保存する。
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の違いは例外を出すか出さないかという点だろうか。
「リスト 10.32」でuserローカル変数が使われているが、9章の演習でassignを使うために@userインスタンス変数として書いていたことを忘れていた。
今は「Ruby on Rails5 学習コース VIII-9」を勉強中。
テストの分岐に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チュートリアルの勉強中。
下記が==演算子を再定義している箇所だと思われる。
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チュートリアル勉強中。
これまで使っていたWEBrickに比べ、Pumaの方が大量のリクエストを捌く能力があるのでPumaに切り替える。
PumaをGemfileに追記する必要はないが、puma.rbに設定が必要となる。
gem 'rails', '~> 5.2.4.2'
gem 'bootstrap-sass','3.4.1'
gem 'puma', '3.12.4'
Rails チュートリアルの勉強中。
コンソールからcreateメソッドを実行し、レコードを保存する。
ハッシュ化されたパスワードを確認する。
authenticateメソッドを使ってみる。
update_attributeメソッドで値を更新する。
update_attributesと間違えてしまったので注意。
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チュートリアルを勉強中。
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 チュートリアル勉強中。
失敗するテストを書く(この後にコードを書いてテストを成功させる)。
ここではaboutページを作る前にテストを書く。
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を何でも良いので入れたくなったが、Gemfileに書くものなのだろうか。
VSCodeのExtensionからRubyをInstallした後、Settingsのruby.formatにrubocopを指定。
group :development doの下に 'rubocop'を追加した。
ターミナルでbundle installを実行した後だけvscode上で使えるようだ(パスの問題だろうか)。
Rubocopでフォーマットしたところ、下記の一文が追加された。
# frozen_string_literal: true
これはマジックコメントと呼ばれ、「デフォルトでStringを変更不可にする」ことを指している。
参考:https://teratail.com/questions/74592