微炭酸ログ

Ruby や Rails を中心に。

2021-06-01から1ヶ月間の記事一覧

【Rails】「このメソッド、呼べるなら呼んでくれ」と書くなら respond_to? よりも try を使う

行けたら行く的な。 結論 @person.non_existing_method if @person.respond_to?(:non_existing_method) # => nil は、 @person.try(:non_existing_method) # => nil と同じだと、https://api.rubyonrails.org/classes/Object.html#method-i-try にありました…

【Rails】length, size, count, empty?, exists? などの使い分け

length() https://api.rubyonrails.org/v6.1.3.2/classes/ActiveRecord/Associations/CollectionProxy.html#method-i-length コレクションがすでにロードされている場合、length と size は同等です。そうでない場合で、とにかくレコードが必要になる場合、…

【RSpec, vcr】1つの example の中で同じURLへのHTTPリクエストを複数回実行する場合は、allow_playback_repeats を使う

vcr を使っていて、1つの example の中で同じURLへのHTTPリクエストを複数回実行しようとすると、エラーになります。 そういうときは、allow_playback_repeats オプションを使用します。 it 'xxxx' do VCR.use_cassette 'xxxx', allow_playback_repeats: tru…

Stimulus を学ぶ

Stimulus Handbook を読んだので、かいつまみました。 コードは Handbook のものを載せています(一部改変しています)。 コントローラを用意する どのコントローラも以下のように定義する。 ファイル名は規約に従ったものにしておく(xxxx_controller.js)…

【Bootstrap5】入力フィールドとボタンを横に並べる

以下のように書くといいのか...? .d-flex %input.form-control.w-auto{ type: :text } %button.btn.btn-secondary.ms-2 Greet 公式を参考に以下のように書いてみたが、これだとスマホ表示の時に横に並ばない。 参考:https://getbootstrap.jp/docs/5.0/form…

Railsアプリに Stimulus を導入する

1. yarn add $ yarn add stimulus 2. app/javascript/controllers/index.js import { Application } from 'stimulus' import { definitionsFromContext } from 'stimulus/webpack-helpers' const application = Application.start() const context = require…

Turbo Streams を学ぶ

基本 以下のように Turbo Streams なレスポンスを返すと、指定した id(この例だと id="messages") の要素に対してストリームアクション(この例だと prepend)できます。 指定したDOMだけに変更を加えることができるので、よりSPAっぽくなります。 ストリ…

【Rails】パーシャルにフラグを渡す際は先頭で遅延初期化させるといい

以下のように書いておけば、フラグ == false のときに、呼び出し側でフラグを渡さなくてよくなる。 - special ||= false - if special # ... - else # ... つまり、以下のように書く必要がなくなる。 render 'xxxx', special: false false のときは変数を渡…

【Rails】ActiveRecord の where で Range を使う

Range でない書き方と並べて書くことで、覚えやすくしています。 beginless, endless の less の部分(..の端)に指定したカラムの値が来るイメージでしょうか。 でも結局、毎回 rails console で確認するのがよさそうではあります。 以下 Book.where('relea…

【RSpec】入力フィールドやボタンが非活性になっているか検証する

入力フィールドやボタンに disabled 属性がついているかを検証するには、以下のように書きます。 it 'フォームに入力できないこと' do # ... expect(page).to have_field '名前', disabled: true expect(page).to have_button '登録する', disabled: true en…

【RSpec】travel_to を使うためのセットアップ

spec/rails_helper.rb に以下のように1行追加すれば、travel_to を使えるようになります。 RSpec.configure do |config| # ... # 追加 config.include ActiveSupport::Testing::TimeHelpers end 参考 RSpecで現在時刻を変更してテストしたいときはtravel_to…