ヨージとプログラミング

プログラミング勉強の記録

【Rails】あるモデルの1属性だけを変更するコントローラーの命名方法

Web系自社開発企業に入社してから初めての投稿です〜 TL;DR 特殊なコントローラーの命名方法についてです うまくまとめれないので全文読んで コントローラーの命名に迷ったら見てください (失敗談)Customerモデルのnote属性のみを変更するコントラーを作った…

【Rails】ransackで複数モデルから検索したい時

TL;DR search_from_forヘルパーは使わない viewでは検索ワードのみ取得 controllerで検索する 環境 Rails 5.2.4.1 Ruby 2.6.5 Ransack 2.3.2 ransackの通常の使い方の延長では無理だった 前提 channelモデルとpostモデルから、検索ワード一致のものをすべて…

【Rails】ransackで複数モデルから検索したい時

TL;DR search_from_forヘルパーは使わない viewでは検索ワードのみ取得 controllerで検索する 環境 Rails 5.2.4.1 Ruby 2.6.5 Ransack 2.3.2 ransackの通常の使い方の延長では無理だった 前提 channelモデルとpostモデルから、検索ワード一致のものをすべて…

【Rials】cronoのREADME通りに設定するとうまく行かないよという話

TL;DR cronoでrakeタスクをスケジュールするときRake::Task['タスク名'].invokeではなくRake::Task['タスク名'].executeで呼び出そう cronoの公式通りにやると、最初の1回目しかrakeタスクが実行されない cronoはrailsのgemで、ジョブスケジューラーです。…

【Rails】Dockerなジョブスケジューラーはwheneverよりcronoがいい

ほとんど検証してない上に独断と偏見ばっかです TL;DR Dockerにcronをインストールしてやる方法はうまく動かなかった(調査中) そもそもcronに依存するスケジューラーは使い勝手悪い cronに依存しないジョブスケジューラーを選定すべき(cronoとか) cronに依…

【Rails6】rails newでちょっとしかファイルができない時の対処

rails newが途中で止まっていた 新規プロジェクトでrails newした時です。明らかに生成されるファイルの数が少ない。configフォルダは?appフォルダは?modleは!? >>> docker-compose run --rm backend rails new . --force --database=mysql (略) exist c…

【heroku】heroku環境では画像は必ずS3に保存しよう

herokuには画像を保存しておけない しりませんでした。 Instagramのクローンアプリをherokuにデプロイした後、seedデータ(ユーザー、画像)を投入。ルートページにアクセスして確認する、うまくいってるなニッコリ 翌日、ルートページを確認すると画像が表示さ…

【Ruby】ある文字列が、リストの中に一致するものがあるか?のやり方が分かって最高

paizaやっててシリーズ Pythonの"in"を目指して もともとPythonを勉強してたこともあり、条件式'in'をついついRubyでも使ってエラーを出してしまう。 word = "greate" list = ["happy", "planet", "greate"] # Python print(word in list) => True # Ruby pu…

【Rails】AWS ECS(EC2)へのseedの流し込み方

王道かはわかりませんが、とりあえずできたので 前提: Mac PC, EC2 on ECS, Rails5, ruby 2.6, EC2 key-pair取得済み, ECS起動済み ① EC2へssh接続 ターミナルです。 $ ssh -i key-pair.pem ec2-user@<パブリックip> ② 起動コンテナ確認 $ docker ps => CON…

【Ruby】1.hourなどでNoMethodError (undefined method `hours'になる場合の対応

Paizaをやっててシリーズ '1.hour'はTimeクラスじゃなかった(衝撃) Paizaで時刻を扱え問題に出会いました。 そうなると、Timeクラスの計算をすることがあります。 例えば、現在の時間から10分後の時間を表示するとします。↓ now = Time.now # => 2020-01…

【Ruby】配列の統合(flatten)と分割(each_slice)

paizaやるときに調べたシリーズ 行列(marix)の操作の時に使用した 数学ではおなじみ行列 以下のような3行3列の行列があったとする 1 2 3 4 5 6 7 8 9 私の浅知恵では、これをプログラムで扱うとすると、配列で入れ子にするのがいいんじゃないかと思うわけで…

【Ruby】配列から要素を抜き出すpop, shift

Paizaをやってて調べたことシリーズ popはケツから、shiftはアタマから 配列に入っている要素を使いたい場合、インデックスを指定して利用することが多いと思います(例:array[1]とか) しかし、その場合だと要素を参照しただけで、元の配列自体から要素を…

【Paiza】Rubyでは文字列のeachはeach_charでまわす等

D問題を解く過程で調べたこと 文字列を1文字ずつeachする時はeach_char word = "abcdef" #正しい word.each_char { |w| puts w } # 間違い word.each { |w| puts w } 文字列に特定の文字が含まれているかの判定に、'in'が使えない(多分) これはpythonとの比…

【Rails】RSpec(Capybara)で使うvisitはit句の中でしか使えない?(調査中)

調べ中ですが忘れないようにとりあえずメモ system specでよく使うvisit system specを書く時、僕なんかはログイン状態のテストをするときは visit login_path みたいに書いて、ログインページに移動するんですが。何気なく使っていると以下のようなエラーが…

【Rails】ActiveRecord::StatementInvalid: Mysql2::Error: Error dropping database (can't rmdir './app_name_test', errno: 39): DROP DATABASE IF EXISTS `app_name_test`

RSpecを実行しようとしてエラー発生 RSpecをdocker環境で実行しようとしてタイトルのようなエラーが発生しました。 >>> docker-compose run web rspec spec/system/records_spec.rb rails aborted! ActiveRecord::StatementInvalid: Mysql2::Error: Error dr…

【Rails】RSpecでインスタンス変数を変更した後はreloadしよう

createした後にインスタンス変数を設定したい場合の話 RSpecでテストを行う前にletでインスタンスを生成することが多いと思います。 # 例 productクラスのインスタンスを生成しproduct_1に代入 let(:product_1) { create(:product, name: 'macbook') } 上の…

【Rails】Could not find rake-12.3.1 in any of the sourcesのエラー解消

環境 Docker for mac gem 'spring-commands-rspec' bin/rspecでrakeが存在しないと言われた 結構あるあるなエラーだと思います。 spring-commands-rspecというrspecを高速化するgemをインストールし、試しにdocker-compose exec web bin/rspecとしたらエラー…

【Rails5】Active::Recordが存在しないときにnilを返したい(find_byを使おう)

find(id)では存在しない時はエラーになる [2] pry(main)> p = Spree::Product.find(0) => Spree::Product Load (0.9ms) SELECT `spree_products`.* FROM `spree_products` WHERE `spree_products`.`deleted_at` IS NULL AND `spree_products`.`id` = 0 LIMIT…

【Rails5】SpreeおよびSolidusの仕組みメモ(執筆中)

公式ドキュメントより 「あるproductは最低1つのSpree::OptionTypeを持つ必要あり」 →しかしproductモデルにはSpree::OptionTypeの外部キーなし。中間テーブルSpree::ProductOptionTypeを通して保有していると思われる。 例)複数の色を提供したければ、"Co…

【Rails5】find_byで取得するobjは1つ、whereは全部

スクール課題中に気づく 今までの誤解がやばかったので自分用のメモ このQiitaのおかげで今までの誤解がとける 【rails】find・find_by・whereについてまとめてみた - Qiita 要約すると # 条件に該当するもののうち最初の1つのみ取得 @images = Image.find_…

【Rails5】コメント機能でのStrongParameterの設定方法

ハッシュが2つ出てくる 私が今回実装したコメント投稿formはこんな感じ。 = form_with(model: [@post, @comment]) do |f| .form-group = f.text_area :body, placeholder: 'コメント追加.', class:'form-control' = f.submit '投稿する', class:'btn' 一見…

【Rails5】devsieのルーティング方法覚書

追記したいコントローラーをルートに書く必要あり Rails.application.routes.draw do root to: 'igposts#index' devise_for :users, skip: [:sessions, :registrations, :signups], controllers: { # 編集するコントローラーを以下に記載 omniauth_callbacks…

【Rails5】途中でCoffeeScriptを排除するときのherokuでの対応方法

herokuでどのように対応すればいいか書いてある記事が少なかったのでメモがてら はじめから排除する場合はかんたん おなじみですが $ rails new --skip-coffee 途中からの場合 開発環境では Gemのcoffeescriptをコメントアウト # Use CoffeeScript for .coff…

【Rails on Docker】credentials.yml.encからmaster.keyを取得する時につまずいたのでメモ

Gemインストールしたのにインストールされてないと言われて… $ EDITOR='code --wait' rails credentials:edit => Could not find minitest-5.12.0 in any of the sources Run `bundle install` to install missing gems. 環境変数EDITORにvscodeを設定してma…

【Rails】Pagyで1ページに2つのページネーションを設置する

先に結論を書きます ページ内にタブ(tab)を設置し、表示内容を切り替えることがあると思います。 (イメージ) 通常(ページネーション1つの時)であれば次のように定義すると思います。 def index @pagy, @users = pagy(User.all) end これとは別に例えば…

【Rails】フォロー機能をAjaxで実装する時は、フォロー後にユーザー情報を更新しよう

星を押してフォローすると星が塗りつぶされるタイプ フォロー前 フォロー後 星を塗りつぶすかどうかは, current_userがすでにフォローしているかどうかをif文で確認して決めています。 - if current_user.following?(user) # 塗りつぶす = link_to icon('fas…

【Rails】routesの設定で「resource」と「resource"s"」の違いで小一時間悩んだ話

DELETEのrouteに:idと:user_idの2つ現れてしまった routesをネストした時に、resourcesと単数形でなかればならないところを複数形で書いてエラーになりました。なんのこっちゃだと思うのでまずはコードを見てください。 # 誤ったコード Rails.application.r…

【Rails】RSpecテストでActiveRecord::RecordInvalid:Validation failed: Email has already been taken エラー

環境 Ruby 2.6.3 Rails 5.2.3 RSpec 1.7.0 Docker for mac テスト後にロールバックしていない 該当のRSpec require 'rails_helper' describe 'レコード管理機能', type: :system do describe '一覧表示機能' do before do user_a = FactoryBot.create(:user,…

【Rails】本番環境(heroku)へのseedの流し込みでハマったのでメモ

主なエラーはfaker関係 いくつものエラーが出ましたが、発端はfakerというgemです。説明不要かもしれませんが、fakerを使用すれば色々なフェイクデータを生成することができます。 私の場合は以下のように、ユーザー名に使用しています。 2行目のFaker::Name…

【Rails】Record.lastで取り出せるのはどんなデータか?

作成中のアプリの挙動がおかしいことに気づいた いきなり私事ですが、私の作成している体重記録アプリで、最後に記録した体重をDBから取得するのですが、こうしました # あるuserの最後のレコードの体重を取得 @last_record = user.records.last.weight 結果…