Rails関連のことを調べてみた2022年05月09日

Rails関連のことを調べてみた2022年05月09日
目次

docker-composeでRails6の開発環境を構築(MySQL使用)

# Dockerで環境構築しってみか〜(ノリ) 「アプリを作るたび、ローカルに環境を構築するのが、面倒臭い」という怠惰な気持ちとやたら出てくる**docker**や**仮想環境**ってのがカッコよくて最近、Rails6とMySQLの開発環境を構築したのでまとめてみました。 ## Dockerとは? こちらをご参照ください – [【図解】Dockerの全体像を理解する -前編-](https://qiita.com/etaroid/items/b1024c7d200a75b992fc) # 0. Dockerをインストールしよう まずは自分のパソコンにDockerをインストールします。 [こちら](https://www.docker.com/)からDockerをインストールしましょう。 ###  任意の作業フォルダを作成する “`:terminal $ mkdir docker-test $ cd docker-test “` # 1. 必要なファイルを準備しよう “`:terminal $ touch {Dockerfile,docker-compose.yml,Ge
元記事を表示

[Rails]タグ一覧での投稿数が多い順に並べる

## はじめに タグ一覧の作成順?の表示が使いにくいと感じ、 初心者(300)←()の中身が多い順に表示して少ないものは表示させないようにできたので投稿します。 多く投稿されているランキング方式に少しだけ(本当に少し)工夫が必要だったので、 とても簡単ですがよろしくお願いします! ⚠タグ機能は実装している前提です. ⚠もし投稿数が多い順で表示されなかったら、自分の環境ではPostモデルにdefault_scopeで最新順にしているからかもしれません。 #### こちらの記事を参考に実装しました! [Railsでお手軽ランキング機能](https://qiita.com/mitsumitsu1128/items/18fa5e49a27e727f00b4) 実装後に気が付きましたが、めちゃくちゃわかりやすい記事が存在してました!!↓↓ [【Rails】いいね順・投稿数順など ◯◯順の考え方・方法](https://qiita.com/ysdiary/items/7c91ca5a3e71311d8fc3) ## 環境 Rails: 6.1.5 Ruby: 2.6.3 ## 結論
元記事を表示

自社サービス「病院なび」へ AWS Opensearch を導入したい

はじめまして。「[病院なび](https://byoinnavi.jp/)」の開発チームメンバー甘利です。 国内最大級の病院検索サービス「病院なび」の改善にRailsエンジニアとして日々挑み続けております。現在 AWS Opensearch の導入を業務いて行なっています。少しずつ共有して行けたらと思っています。(※ この記事に具体的な手順等は含まれていません) # 概要  自社サービスの 「病院なび」 に AWS Opensearch を導入するにあたり ”使いやすい仕組み” を目指して色々考えていきたいと思っています。「病院なび」 は主に Ruby on Railsで開発されていますので、便利な Gem で楽な実装ができると考えていました。ところが、AWS Elasticsearch から AWS Opensearch に変更になってしまい、巷にあるGemがそのまま使えなくなってしまい、楽ができなくなってしまいました orz。  現状、Opensearch を Rails から利用する際の選択肢として”公式コミュニティが公開している Ruby 用クライアントの利用”が比較的楽で
元記事を表示

ネスト、collectionとmemberの違いについて(ルーテイング設定)

ルーテイング設定のネスト、collectionとmemberの違いについて学んでいきましょう。 “` resources :stores do resources :products member do get ‘drink’ end collection do get ‘ice’ end end “` まずはネストから学んでいきましょう。 記載方法としては上の1~2行目です。 このようにresourcesの中にresourcesを記載することで 親子関係を作ることができます。 routingがこのようになります。 “` #ネストしたルーテイング /stores/:store_id/products/:id “` storeの中にproductが入り込んでいるイメージです。 次は一気にmemberとcollectionを見ていきましょう。 一番最初のコードの2行目以外にご注目ください。 このmemberとcollectionを使うと下のようにルーテイングが変化します。 ルーテイングが変わることによって、基本のアクション以外のルーテイングを
元記事を表示

コールバック処理を実現する(before_action)

コントローラーのアクションを記述する際に、全く同じ文を記述していることはないでしょうか?例えば下の記述のような感じです。 “` #Drink Controller def edit @drink = Drink.find(params[:id]) end def destroy @drink = Drink.find(params[:id]) @drink.destroy ~~省略~~ end “` このような感じでeditとdestroyの一行目が同じ処理を記述していますよね。 こう言う時はbefore_actionでまとめてあげましょう。 “` before_action: set_drink, only: [:edit, :destroy] def edit; end def destroy @drink.destroy ~~省略~~ end def set_drink @drink = Drink.find(params[:id]) end “` このような感じでコードをすっきり書くことができます。 同じ処理は何度もかくより一つ
元記事を表示

[ERROR]Linux Native AIO interface is not supported on this platform. Please check your OS documentation and install appropriate binary of InnoDB.の対処法

Rails + MySQL + DockerでWebアプリを作っていた所 DBからエラーが吐かれているのを見つけた。 “`zsh [ERROR] [MY-012585] [InnoDB] Linux Native AIO interface is not supported on this platform. Please check your OS documentation and install appropriate binary of InnoDB. “` 今回のエラーでアプリが落ちているわけでは無いが、エラーが毎回吐かれるのは精神衛生的によく無い。 とりあえずGoogle翻訳 > [エラー][MY-012585][InnoDB]LinuxネイティブAIOインターフェースはこのプラットフォームではサポートされていません。 OSのドキュメントを確認し、InnoDBの適切なバイナリをインストールしてください。 どうやら対応していない様です。 docker-compose.ymlへ以下を記載します。 “`docker-compose.yml version: ‘3
元記事を表示

【Rails】deviseでログイン機能実装

# はじめに 本記事では、deviseでのログイン機能の実装方法をまとめます。 # 手順 “`ruby:Gemfile gem ‘devise’ “` 上記を記入後、ターミナルで、`bandle install`。 その後、下記を実行。 “`terminal $ rails generate devise:install “` 下記の画面が出てきたら、インストールできています。 ただ、1~4の設定が必要です。 ![スクリーンショット 2022-05-08 19.43.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1244172/41f86e3a-6e03-2fdb-5d11-e05d541f5423.png) 1.config/environments/development.rbに下記コードを追加。 “`ruby:config/environments/development.rb config.action_mailer.default_url_options = { ho
元記事を表示

Active Storage x ECS Fargateで画像投稿できない

## 現象 フロントからAPIにURL保存・S3にも保存出来る・フロントでimg srcは表示できるが透明な画像が表示されてしまう(クリックで別タブで透明な画像が開く) なのでaltも出ない ![スクリーンショット 2022-05-08 18.36.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621282/fa185106-b395-c31e-2c11-ffdf469d8818.png) ## 前提 フロント・バックエンドを分離してアプリを作成中 それぞれドメイン・サブドメイン割当済み ## 結論 production.rbの`Rails.application.routes.default_url_options[:host]`の値をフロントではなくバックエンド側のURLを指定 “`production.rb – host = ‘https://hoge.com’ + host = ‘https://back.hoge.com’ Rails.application.rout
元記事を表示

Rails向けのDigdagブリッジライブラリを作った

## これなに RailsとDigdagを繋ぐライブラリ、「[mogura](https://github.com/KentFujii/mogura)」を公開しました。 ## モチベーション Railsでバッチを管理する手段としてRakeタスクがあります。 しかしバッチ処理というのは泥臭い要件が発生することが多く、コードベースが肥大化し運用コストがかさみがちです。 バッチの運用コスト肥大化に伴いワークフローエンジンの導入を検討するかとおもいますが、Airflowを筆頭にしたPython製のプロフェッショナルなETLツールを導入するのは、学習/構築/運用/費用あるいは人材採用といったハードルが存在する局面があるかと思います。 またRakeタスクに内包された、Railsに紐づいた業務ロジックをマイクロサービスとして切り出しPythonで書き直すのは、工数を鑑みると現実的な選択肢にならないことが往々にしてあるかと思います。 Railsアプリケーションの中にワークフローエンジンを内包したい、という需要もあるのではないでしょうか? そこでRailsアプリケーションの業務ロジックを流用し
元記事を表示

RSpecでCapybaraを導入する

# 概要 RSpecにCapybaraを導入したらつまづいたので解決方法を共有します 1人でも多くの人の役にたてればと思います。 # はじめに ### 使用する環境 – MacOS(M1) – Rails 6.1.5 – Ruby 3.1.0 – yarn 1.22.17 – Homebrew 3.4.8 ## 状況 ログインのテストを作成しようとしたときに、 visit root_pathを記述してページ移動をしようとした時に、テストを実行しようとしたらエラーが出てしまって詰まった ### 1つ目のエラー ![スクリーンショット 2022-05-08 16.27.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2124434/6324eaee-a695-3864-fd88-19c2198b5452.png) ### 考察 文法的には間違えてない為デバックをしたところ、visitがそもそも定義されてないことを発見した。 調べてみるとvisitはCapybaraに定義されてる為うまく読み
元記事を表示

nginx.confの中身を理解したいので一つずつ調べました

こんにちは Nginxを導入する上でnginx.confファイルを記述するのですが、初学者あるあるとして適当に「rails nginx docker」って調べて出てきたコードをそのままコピペして導入することがあるとおもいます。 しかしそれはあまりよろしくないと思ったので、ある程度は理解できるようにここにアウトプットします。 # nginx.confの例(Railsのpumaを用いる場合) 「rails nginx docker」で調べたら出てきた [こちら](https://qiita.com/eighty8/items/0288ab9c127ddb683315#nginx%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB)の記事を参考にとりあえず全体像を貼り付けておきます。 “`nginx:nginx.conf # プロキシ先の指定 # Nginxが受け取ったリクエストをバックエンドのpumaに送信 upstream webapp { # ソケット通信したいのでpuma.sockを指定 server unix:/
元記事を表示

ActiveAdminで検索条件で生SQLを使用する方法

# 概要 ActiveAdminの検索条件を追加するにあたり、ちょっと複雑な条件で検索をかけたかったです。いろいろ検討した結果、生のSQLを組む実装となったので、その方法を残しておきます。 ## activeadminの実装 “`app/admin/users.rb ActiveAdmin.register Article do filter :search_name, as: :string end “` ## Modelの実装 “`app/models/User.rb SQLはもっと複雑な感じで同じテーブルの外部キーがあったり、joinした先のさらに先のテーブルの項目見たり… # 検索条件:キーワード scope :search_keyword, lambda { |keyword| sql = “SELECT * FROM users LEFT JOIN users u1 ON users.partner1_id = u1.id LEFT JOIN users u2 ON users.partner2_id = u2.id” User.find_by_s
元記事を表示

rails ネスト機能について

今回はrailsのルーテイングの時に役に立つnestについてまとめて見ました。 ネストを使うとルーテイングの見やすさが一気に上がるので、ぜひこの記事を参考にして見てください。 早速ですが、ネストを理解する前に、掲示板とコメントの関係を思い出してください。 … 掲示板とコメントの関係ですが、これは、必ずと言っていいほど、掲示板の中にコメントが書かれていますよね。 このQiitaも全く同じ機能で、掲示板を僕が一つ記事を書き、そこに読者様からのコメントがありますよね。 こういう風に一対多(掲示板が1、コメントが多)の関係になっているものはネストでルーテイングを表現してあげましょう。 そちらの方が視覚的にも見やすいです。 具体的には以下をご覧ください。 Boardモデル “` class Board < ApplicationRecord has_many :comments end ``` Commentモデル ``` class Comment < ApplicationRecord belongs_to :board end ``` ネストの表現方法は下のよう
元記事を表示

【Rails】2022年度版 Devise + Omniauth でGoogle認証(SNS認証)を丁寧に解説

## 概要 今回は標題の通り、Devise + Omniauth でGoogle認証の実装手順を記していきます。 **なぜ今さら記すことに至ったかですが、参照させていただいた記事を軸に進めていたのですが、所々エラーになってしまったり、プラスで追加しなければいけないものもあるので、今後導入する方の参考になればと思ったからです。** 他のSNS認証でも大枠は同じだと思うので、Twitterなど導入したいものがあれば置き換えて参考にしてくだされば幸いです。 尚、ご指摘箇所がございましたら ご教授いただけますと幸いです。 ## はじめに では、早速といきたいところですが先に私の環境と前提をお話ししていきます。 – macOS Monterey 12.3.1 (M1) – Rails 6.1.5 – MariaDB 10.6.7 そして、今回私は`Devise`を導入しており、後ほど`uid`カラムと`provider`カラムを追加するのですが`User`モデルではなく別の`Sns_Credential`モデルに追加する手順で進めていきます。 **また、`Devise`の各種実
元記事を表示

[railsチュートリアルで理解必須]railsアプリケーションの仕組み

# はじめに 今回はrailsの仕組みやどのように動いているかをアウトプットしていきます! もし誤りがございましたらコメントでご指摘ください! # 前提 Usersリソースをscaffoldで生成している。 # Model-View-Controller (MVC) **railsアプリケーションの仕組みを理解する上でとても重要なのがMVCモデルです** **この理解を曖昧にして勉強を続けているといつか必ず詰みます(実体験)** MVCモデルとは、ソフトウェアをModel・View・Controllerの3要素に分割し、プログラムを整理しやすくする考え方です。 railsはこのMVCというアーキテクチャパターンを採用している。 > Railsアプリと通信する際、ブラウザは一般的にWebサーバーにリクエスト (request) を送信し、これはリクエストを処理する役割を担っているRailsのコントローラ (controller) に渡されます。コントローラは、場合によってはすぐにビュー (view) を生成してHTMLをブラウザに送り返します。動的なサイトでは、一般にコントローラは
元記事を表示

Ruby on Railsのrefileでwrong number of arguments (given 3, expected 2; required keyword: object)が発生したときの対処

Rails初心者大学生です。
こちらを元に、編集画面にrefileで画像アップロードをしようとした所、上記のエラーが吐かれたので奮闘しました。 再び同様の事態が起きても対処できるようにメモ。 ## 環境 Ruby: 3.1.2 Rails: 7.0.2.4 ## 原因 https://teratail.com/questions/313718 上記の回答によると、どうやらrefile自体が長らく保守されていないため、現在のバージョンに対応していないらしいです。 ## 試したこと バージョンダウンを試みました。rbenvを利用してインストールし、Gemfileの内容を変更。 Ruby: 2.7.6 Rails: 6.1.3.2 こちらで、「bundle install」を実行すると、 “` Bundler could not find compatible versions for gem “activesupport”: In snapshot (Gemfile.lock):
元記事を表示

activerecord-importの配列の指定でActiveRecordの仕様を理解してなくてハマったところ

### はじめに update時にbulk insertを使用することがあり、その時にActiveRecordの仕様を理解しておらず詰まったので残しておく。 ### 結論 “`rb company = Company.find(params[:id:) Employee.import company.employees.to_a, on_duplicate_key_update: [:first_name, :last_name] # もしくはcompany.employees.all “` ### 事象 1..nの関係の2つのモデル(Company, employee)があり、n(employee)のデータを更新する場合に1のモデル(User)のインスタンスから取得したn(employee)を引数にしたところ失敗した。 下記の記述で実行すると`Invalid arguments!`が発生する。 “`rb company = Company.find(params[:id:) Employee.import company.employees, on_duplicate
元記事を表示

【解決策】<%= image_tag モデル名.image %>でビューに表示されない / Rails / アクティブストレージ使用 / アソシエーション済

今回は以下のエラーに出会った際の解決策をご紹介します。

Ruby on Rails

<%= image_tag item.i

元記事を表示

rails twitterみたいに投稿してからの時間を表示 完全版

rails でTwitterのように投稿時間を「何分前」と表示したい場合 ステップ1  posts controoller のcreateアクションでPost .newにcreated_at:        params[:created_at])を追加する ステップ2  index.htmlで投稿一覧をつくる。(これは自分の作りたいものによって変わる) ステップ3  表示したいview(私の場合index.html)で<%= time_ago_in_words(post.created_at) %>前 を書く。 ステップ4  about 1 hour 前 や  1day 前         などが表示されるようになる。 ステップ5  config.time_zone = “Asia/Tokyo”         config.i18n.default_locale = :ja   をconfig/application.rbで入力する ステップ6  config/locales/en.yml で  ja: datetime: distance_in
元記事を表示

【Rails/MySQL】bundle installでgem mysql2がインストールできない時の解決法

## 環境 macOS Monterey:12.3.1 Ruby:3.1.0 Ruby on Rails:6.1.5 Bundler:2.3.12 MySQL:8.0.28(Homebrew3.4.10でインストール) ## エラー時の状況 1. RailsでMySQLを使うために“rails new -d mysql“を実行 1. bundle installの所でエラーが発生(mysql2のインストールに失敗していた) 上記のエラーの解決法を紹介します。 ## エラーログ “`shell kazunoko@macbook test % rails new -d mysql 省略 run bundle install Fetching gem metadata from https://rubygems.org/……….. Resolving dependencies…. 省略 Gem::Ext::BuildError: ERROR: Failed to build gem native extensio
元記事を表示

アクティブストレージを使用して itemモデルとアソシエーションを行ったが、

<%= image_tag item.i

元記事を表示

rails twitterみたいに投稿してからの時間を表示 完全版

rails でTwitterのように投稿時間を「何分前」と表示したい場合 ステップ1  posts controoller のcreateアクションでPost .newにcreated_at:        params[:created_at])を追加する ステップ2  index.htmlで投稿一覧をつくる。(これは自分の作りたいものによって変わる) ステップ3  表示したいview(私の場合index.html)で<%= time_ago_in_words(post.created_at) %>前 を書く。 ステップ4  about 1 hour 前 や  1day 前         などが表示されるようになる。 ステップ5  config.time_zone = “Asia/Tokyo”         config.i18n.default_locale = :ja   をconfig/application.rbで入力する ステップ6  config/locales/en.yml で  ja: datetime: distance_in
元記事を表示

【Rails/MySQL】bundle installでgem mysql2がインストールできない時の解決法

## 環境 macOS Monterey:12.3.1 Ruby:3.1.0 Ruby on Rails:6.1.5 Bundler:2.3.12 MySQL:8.0.28(Homebrew3.4.10でインストール) ## エラー時の状況 1. RailsでMySQLを使うために“rails new -d mysql“を実行 1. bundle installの所でエラーが発生(mysql2のインストールに失敗していた) 上記のエラーの解決法を紹介します。 ## エラーログ “`shell kazunoko@macbook test % rails new -d mysql 省略 run bundle install Fetching gem metadata from https://rubygems.org/……….. Resolving dependencies…. 省略 Gem::Ext::BuildError: ERROR: Failed to build gem native extensio
元記事を表示

OTHERカテゴリの最新記事