Just do IT

思うは招く

Ruby on Rails

Rails 6 で Cocoon を使ってネストしたフォームを作る方法

こんなものを作る記事です やりたいこと 2つのモデルが紐付いたフォームをつくりたい ネストしたフォームをつくりたい 複数のデータを一度に追加したい 動画だとこんな感じです youtu.be 「とりあえずソースコード見せて!」という方はこちらへ。 GitHub - k…

【Issue振り返り】本番のDBを変更するときの注意

どんな Issue をしたのか Issue: Docsに表示する情報を増やしてほしい · Issue #1517 · fjordllc/bootcamp PR: Docsに表示する情報を増やす by kotakanazawa · Pull Request #1603 · fjordllc/bootcamp 実現したいこと 誰でも作成できるドキュメントページ(…

【Rails】テーブルを新規作成するときに外部キーも設定する

たとえば、親モデル(User)があり、user_id を外部キーとして子モデル(Book)を作りたい場合。 bin/rails g model Book title:string memo:text user:references user:referencesをつけると、booksテーブルにはuser_idが自動で追加される。users テーブル…

rails g で作成したコントローラーやモデルを取り消すには destroy する

やりたいこと rails g controller reference_books で作ったコントローラーを削除したい。 方法 destroy コマンドで関連ファイルも含めて削除できる。 rails destroy controller reference_books モデルを削除したい場合。 rails destroy model reference_bo…

Mechanize gem でテストをすると Queue not empty エラー

起きた問題 Mechanize gem を使い、テストを実行しても以下のエラーが出る。 sparklemotion/mechanize: Mechanize is a ruby library that makes automated web interaction easy. # テスト rails test エラーメッセージ Queue not empty, but all workers h…

rails db:migrate をすると出るPG::DuplicateColumn: ERROR の対処

起きたエラー テーブルをいじっていていろいろミスったので、git reset --hardをして再度rails db:migrateコマンドを打つと、次のエラーが出た。 PG::DuplicateColumn: ERROR: column "user_id" of relation "pages" already exists 「pagesテーブルにuser_i…

Railsの例外処理。素人は安易にrescueしない

例外処理について、以下の説明動画を見た。解説者は「プロを目指す人のためのRuby入門」を書いた伊藤さん。 www.youtube.com 結論「素人は安易にrescueすんな!」 学び rescueを使うのは本当にやむを得ないときだけ。 業務エラーとシステムエラーは分けて考…

bin/rails と bundle exec rails の違い

結論 どちらも挙動は同じ。 Gemfile どおりの gem を利用できる環境上で rails コマンドが使える。 bin/railsでは、そのRailsアプリケーションのルートディレクトリ直下の bin ディレクトリにある rails というスクリプトを呼び出している。 仕組み bin/rail…

Railsアプリ開発に途中から参加してローカルで動かすまでの手順

手順 なにはともあれGitHubからクローン 開発メンバーがGitHubリポジトリに招待してくれたら、フォークしなくてもクローンできるようになる。 git clone ~ Rubyのバージョン合わせ 開発で使っている環境と合わせる。rbenv使用。 READMEを見る たいていの場合…

「rails db:migrate」と「db:schema:load」の違い

rails db:migrate マイグレーションファイルをもとにして、データベースとスキーマファイル(schema.rb)をつくったり、更新する。 rails db:schema:load スキーマファイル(schema.rb)をもとにして、データベースをつくる。 データベースは削除され、作り…

assets:precompile や rails console をすると出る warning Integrity check: Flags don't match の対処

bin/rails assets:precompile bin/rails console 上記のコマンドを叩くと、次のエラーが出て動かない warning Integrity check: Flags don't match error Integrity check failed error Found 1 errors. ======================================== Your Yarn…

Vagrant + Linux で Rails サーバーを立ち上げてブラウザからアクセスしたい

環境 vagrant Debian 10 ポートフォワーディングをしていると、localhost:3000にアクセスしても表示されない。(というか、vagrantはすこしややこしい部分がある) # これではアクセスできない bin/rails s こうする。 # development環境で起動 bin/rails s …

An error occurred while installing pg (1.2.3), and Bundler cannot continue エラーの対処

問題 rails new sample -d postgresql したときに出たエラー。 Gem::Ext::BuildError: ERROR: Failed to build gem native extension. An error occurred while installing pg (1.2.3), and Bundler cannot continue. Make sure that `gem install pg -v '1.…

Vagrant + Linux で rails new をして Permission denied @ dir_s_mkdir エラーが出る

環境 vagrant Debian 10 Rails 6.0.2.2 anyenv 1.1.1 問題 vagrant@contrib-buster:~/workspace$ bin/rails new sample -d postgresql をしても、以下のエラーが出る。 Permission denied @ dir_s_mkdir - /home/vagrant/workspace/sample (Errno::EACCES) P…

Linuxサーバー上でRailsアプリ(production環境)を立ち上げる

やりたいこと さくらVPS上にインストールしたDebianにRailsアプリを構築 production環境で動かす ローカルではDBはsqlite3だったが、PostgreSQLに変更 環境 さくらVPS Debian GNU/Linux 10 (buster) Mac使用 DB: PostgreSQL 10.11 手順 VSCodeでLinuxサーバ…

ローカルのproduction環境でRailsアプリを立ち上げる

やりたいこと ローカルPC上で、Railsアプリケーションをproduction環境で立ち上げる。 流れ アセットをプリコンパイルする $ bin/rails assets:precompile yarn install v1.13.0 [1/4] Resolving packages... success Already up-to-date. ✨ Done in 0.55s.…

Rails でシステムテストファイルを生成するコマンド

booksコントローラーに対応するシステムテストを作りたいなら。 Rails テスティングガイド - Railsガイド bin/rails g system_test books なお、システムテストにはcapybaraが使われる。 使い方は以下。 capybaraの書き方 teamcapybara/capybara: Acceptance…

Rails 他のモデルのカラム名の日本語を取得してしまう

ハマった理由があまりにもアホすぎるので、戒めのためにメモとして残す。 問題 Reportモデルを追加し、日本語ファイルに各カラムの日本語翻訳を設定。 さぁビュー側で呼び出すぞ、と書いても日本語訳が出てこない。 なぜか別のモデルのカラム名の日本語を呼…

【Rails】既存のテーブルにカラムを追加し、外部キーとして設定する

例1:references型を使わない やりたいこと User(親)モデルとReport(子)モデルを紐付けたい Repors テーブル に user_id を外部キーとして追加したい まず、カラムを追加する。 bin/rails g migration add_[新しいカラム名]_to_[テーブル名] [新しいカラ…

RailsでTODOコメントを探し出すコマンド

rails notes 上記コマンドを叩くことで、以下のキーワードがある箇所を見つけ出してくれる TODO FIXME OPTIMIZE 例: $ rails notes app/views/users/show.html.erb: * [21] [TODO] パーシャル化 ※大文字で書かないと見つけてくれないので注意! # 見つけて…

Railsチュートリアル11章 ローカル環境でアカウント有効化メールをどう確認するか

やりたいこと 第11章 アカウントの有効化 - Railsチュートリアルで、ローカル環境でサイトに登録したい。 わからないこと アカウント有効化メールをどこで確認すればいいのかわからない。 解決 同章の「リスト 11.25: サーバーログに表示されたアカウント有…

Railsチュートリアル10章(10.4.3) ユーザー削除のテストでエラーが出る

問題 Railsチュートリアル第10章の10.4.3にて、「ユーザーを削除する」テストをしても通らない。 「nilクラスにadmin?メソッドはないよ」と言われてしまう。 NoMethodError: undefined method `admin?' for nil:NilClass 解決 logged_in_userのbefore_action…

Railsチュートリアル10章で出た警告update_attributes is deprecated and will be removed from Rails 6.1

問題 第10章 ユーザーの更新・表示・削除 - Railsチュートリアルのリスト10.12で、テストを実行すると以下のような警告が出る。 DEPRECATION WARNING: update_attributes is deprecated and will be removed from Rails 6.1 (please, use update instead) 「…

Rails カラム名を変更するマイグレーションファイルの作成方法

Railsでカラム名を変更、修正したい bin/rails g migration rename_変更前のカラム名_column_to_テーブル名 実例 follower_idとカラムを作ったと思っていたが、実際はfollwer_idだった follower_idに修正したい bin/rails g migration rename_follwer_id_col…

RailsのsubmitボタンにBootstrapのbuttonを適用させる方法

やりたいこと Railsアプリのフォームヘルパー内で、submitボタンにBootstrapのbuttonデザインを適用させたい。 ~ = f.submit # これにBootstrapのボタンクラスをつけたい。 解決 CSSぽくクラスをあてるだけ。 = f.submit nil, class: 'btn btn-primary' これ…

ActiveStorageを使って画像アップロード機能を実装してみる

やりたいこと ActiveStorageを使い、Railsアプリに画像をアップロードする機能をつけたい(development環境)。 環境 Rails 6.0.2.1 ruby 2.6.5 MacOS/Homebrew 試作アプリをつくる active_storageというRailsアプリを作る。 続いて、簡単なブログ機能を作成…

slimでテキストとインスタンス変数を横並びで表示したい

やりたいこと Rails をはじめよう - Railsガイドでブログにコメントをつける機能の実装をしていたときのこと。 これを こうしたい。 つまり、pタグ内に=で始まる変数を入れたい。 なおerbではなくslimを使っている(タイトルが適切に表現しているかはわから…

omniauthを使ってRailsアプリにFacebook認証を実装する

前回の記事の続き。 k-koh.hatenablog.com やりたいこと 環境 Facebookアプリの用意 Rails側の実装 必要なgemをインストール .envファイルを作成 devise.rbに追記 Userモデルにカラムを追加 コントローラーを作成 SNS認証をしたときのコールバック処理を定義…

Rails カラムを削除するマイグレーションファイルの作り方

例:BooksテーブルからAuthorカラム(string)を削除する場合。 bin/rails g migration RemoveAuthorFromBooks author:string changeメソッドではなく、up、downメソッドを使って書く。 class RemoveAuthorFromBooks < ActiveRecord::Migration def up remov…

deviseを使ってRailsアプリに簡単なログイン認証を実装してみる

やること 開発環境 deviseを使う準備 viewファイルの作成 Userモデルを作成する テーブルに保存される内容をチェック マイグレーションを実行 現時点でのルーティングを確認 一旦コミットする コントローラーを作成 app/views/home/index.html.erbに追記 app…