Fakerのエラー:ArgumentError: wrong number of arguments (given 1, expected 0)
Railsチュートリアル13章(13.2.2マイクロポストのサンプル)
チュートリアルにしたがって、
users = User.order(:created_at).take(6) 50.times do content = Faker::Lorem.sentence(5) users.each { |user| user.microposts.create!(content: content) } end
としたところ、
$ rails db:seed rails aborted! ArgumentError: wrong number of arguments (given 1, expected 0) C:/…/environment/sample_app/db/seeds.rb:31:in `block in <main>' C:/…/environment/sample_app/db/seeds.rb:30:in `times' C:/…/mntbl/environment/sample_app/db/seeds.rb:30:in `<main>' Tasks: TOP => db:seed (See full trace by running task with --trace)
引数が多すぎるとのこと。
content = Faker::Lorem.sentence
思い切ってFaker::Lorem.sentenceの引数を消したら、いけました。
なお、Fakerのバージョンは3.0.0
Faker::Loremのドキュメント(github)を確認すると、引数を指定しない場合はセンテンスの長さがちょうど4単語になるとのこと。
ActiveRecord::NotNullViolation: RuntimeError: NOT NULL constraint failed: microposts.user_id
Railsチュートリアル13章
「13.1.4マイクロポストを改良する」という項のなかで、テストを実行すると、
ActiveRecord::NotNullViolation: RuntimeError: NOT NULL constraint failed: microposts.user_id
というエラーが出た。
トライ&エラー&ググレカスを繰り返し、結局
orange: content: "I just ate an orange!" created_at: <%= 10.minutes.ago %> user: yuki tau_manifesto: content: "Check out the @tauday site by @mhartl: http://tauday.com" created_at: <%= 3.years.ago %> user: yuki cat_video: content: "Sad cats are sad: http://youtu.be/PKffm2uI4dk" created_at: <%= 2.hours.ago %> user: yuki most_recent: content: "Writing a short test" created_at: <%= Time.zone.now %> user: yuki
microposts.ymlに、それぞれuser:の行を追加して、test/fixtures/users.yml内に存在するユーザー(私の場合yuki、チュートリアル通りだとmichael)に紐づけたら、テスト通過。
追記:章の少し先にいったところ(13.2.3)で、結局user:の行を追加していた。バージョンの違いによってテスト通ったり通らなかったりするようだ。
朝、PCを開いたら音量が大音量になっていた(Windows10)
※別に面白い話は始まりません。
音量を下げても、なぜかずっと音量MAXのまま。 タスクバーから音量ミキサーを開くと、どういうわけか全部0になっている。 再起動しても変わらず。ブラウザを変えても大音量のままなので、PCの側がおかしい。
試したこと
デバイスマネージャーから「サウンド、ビデオ、およびゲームコントローラー」を開き、サウンドの「デバイスを無効にする」を押す。
再起動すると、当然、音量調節はできず、YouTubeを開いても音は鳴らない。
ふたたびデバイスマネージャーを開き、今度は、「デバイスを有効にする」を押す。
→治った!
調べても同じ症状の人が見つからなかったが、似たような人なら一人いた。 音量設定を無視して音が鳴る この方はvisual studio Codeを起動すると、症状が出る(気がする)らしい。 たしかに2週間前に入れたけど、まさかね…。 もう少し様子見てみます。
RailsとJavaScript(メモ)
ブラウザはネイティブではDELETEリクエストを送信できないため、RailsではJavaScriptを使って偽造します。つまり、JavaScriptがオフになっているとユーザー削除のリンクも無効になるということです。JavaScriptをサポートしないブラウザをサポートする必要がある場合は、フォームとPOSTリクエストを使ってDELETEリクエストを偽造することもできます。こちらはJavaScriptがなくても動作します 。
注)詳しくはRailsCastの "JavaScriptを使わない削除" (英語) を観てください。
JavaScriptの入れ方わからんから、DELETE使うやつは飛ばしてこ…。
(なおRails 7.0.4)
#これだとdeleteではなくget扱いになる <%= link_to "Log out", logout_path, method: :delete } %>
#調べてみたらturboの書き方でいけるとあったけど、だめだった。 <%= link_to "Log out", logout_path, data: { turbo_method: :delete } %>
#buttonならいけるので、これで妥協。(Railsチュートリアルのスタイルシートがボタンの所だけ変な感じになるが…) <%= button_to "Log out", logout_path, method: :delete %>
link_toからbutton_toに変えたので、テストのassert_selectもa[href=?]から[action=?]に変えておく。
(チュートリアルで一番てこずったが、立ち止まって、こういう試行錯誤をするなかで理解が進んでいっている)