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

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

メソッドまとめ 第一弾

メソッドまとめ

まずは数値クラスから見ていきましょう。

〜〜数値クラスのメソッド〜〜

数値.round 四捨五入
数値.floor 切り下げ
数値.ceil 切り上げ
数値.truncafe 切り捨て
数値.zero? 0かどうか確かめる
数値.odd? 奇数かどうか確かめる
数値.even? 偶数かどうか確かめる
文字列.to_i 数値に変わる
数字.to_s 文字列に変わる
(?がつくと真偽値を返します。)

“`
num = 7.77

num.round => 8
num.floor => 7
num.ceil => 8
num.trancafe => 7
0.zero? => true
“`

次は文字列クラスのメソッドです。

〜〜文字列の演算式〜〜

“`
“abc” + “xyz” => “abcxyz”
“abc” * 3 => “abcabcabc”
“abc” << "xyz" => “abcxyz” //+との違いは元の変数の中身も+をしたものになる
“aaa@aaa.com” =~ /@/ => 3 //=~は調べたい変数がどこにいるの

元記事を表示

<パーミッション>Railsアプリでパーミッションエラー

今回はRailsアプリで発生したパーミッションに関するエラーの
対策を備忘録として残します。

# rails s 時に発生

“`
Errno::EACCES (Permission denied @ apply2files – /Users/ユーザーネーム/Documents/homepage/homepage_on_ruby_on_rails/homepage/tmp/cache/assets/sprockets/v4.0.0/Ku/KueVW_Fgne0MoM9sWUxwZLSJS_YpySO0N2iIaOhPsgg.cache):
“`

とエラーが表示されビューが返されませんでした。

どうやら権限がない?ということらしい。

確認します。
“`
$ ls -al /Users/ユーザーネーム/Documents/homepage/homepage_on_ruby_on_rails/homepage/tmp/cache/assets/sprockets/v4.0.0/ku
total 8
drwxr-xr-x 3 root

元記事を表示

Rails7(Hotwire)のSPA体験が快適すぎるので紹介する

Rails7を使った管理画面を業務で、2件ほど進めているのですが、
Rails7から搭載されたHotwireによるSPAっぽい開発が良すぎたので紹介します。

特に今回はRansack、Kaminariをつかたった検索一覧画面の実装を紹介します。
これを例えば、Rails API + Vue.jsとかでやろうものなら、なかなか大変ですね。(っていうかめんどくないのでやらない)

# 事前準備
## 今回使うプロジェクトはこちら
https://qiita.com/tikaranimaru/items/70f87b1fe4b1e7166348

## 情報
– ruby2.7
– Rails7.0
– css: tailwind css

## 使用するデータ
シンプルに食べ物を管理するアプリを作りたいと思います
“`rb
# 食べ物をカテゴライズする種別データ
create_table :kinds do |t|
t.string :name

t.timestamps
end

# 食べ物データ
create_table :foods do |t|
t.string :

元記事を表示

railsでNoMethodError: undefined method `silence’と言われたエラーの対応方法

こんにちは。[virapture株式会社](https://virapture.com)の[もぐめっと](https://mogmet.com)です。

本日はトラブルシュートな記事になります。

## 問題

railsで開発していたところ、pumaを使ったrailsのログ出力をdockerでそのまま出力したいと思って設定したら下記のエラーが出てしまいました。

“`
#>
“`

というエラーがでて画像が表示されなくなってしまいました。

## 解決法

調べたら下記に答えがあった。

https://github.com/rails/sprockets-rails/issues/376

早速config/environments/development.rbのファイルを修正した。

“`development.rb
config.logger = Logger.new(STDOUT)
“`

としていたところを

元記事を表示

【Rails】actionmeilerのsubjectをi18nで日本語化する

# 初めに

`Rails`でメールの件名を `i18n` で設定する方法を忘備録として残しておきます。

## 環境

– Rails 6.1.4

– Ruby 2.7.4

# 日本語設定

`ja.yml`に日本語を追加することで`subject`を設定できます。
また、引数を与えて動的に変更することもできます。

## user_mailer.rb

“`ruby:user_mailer.rb
class UserMailer < ActionMailer::Base def welcome # mail(to: '宛先' ,suject: '件名') mail(to: '宛先') end def signin(user) mail(to:'宛先', subject: default_i18n_subject(user: user.name)) # 引数を与える場合はdefault_i18n_subjectを利用する end end ``` ## ja.yml ```yaml:ja.yml ja: user_mai

元記事を表示

【初心者でも無料でHTTPS化したい!!!】Certbotを用いて実装【画像つき】

# この記事でわかること
HTTPでのデプロイ後Certbotを用いた無料でのHTTPS取得方法を解説します!
独学やスクールでの初学者に向けて丁寧に解説していきます。

参考にしていただけると幸いです^^
また間違っているところがあればご教授お願いします

# 環境
Ruby 2.6.3
Rails 5.2.6
本番環境 nginx/Puma/Amazon Linux2/AWS EC2/MySQL

___※CertbotはAmazon Linuxでは動作しません
Amazon Linux2を使用している場合のみ実装できます___

# 目次
1. EC2にHTTPSを追加する
1. nginxのconfファイルを編集
1. railsのconfigファイルを編集
1. Certbotの実装
1. 自動更新のcronを設定する

# 解説
### 1.EC2にHTTPSを追加する

AWSにログインしEC2を開いて、
インスタンスID > セキュリティ > セキュリティグループの順に進みます。

![C9F6DDB3-7B9F-4E53-B85F-FF5FB7D83440_1_201

元記事を表示

【個人開発】母音法を広めたい!劇団四季も使っている『母音法』で発声練習ができるサービス『BOIトレ ~ 母音法で発声練習 ~』をリリースしました!

## まず母音法って?
日本語は母音の「あ・い・う・え・お」と子音でできています。
いわば母音は言葉の土台部分にあたるので、
この土台がしっかり発音できるようになると、ハッキリした声で発音できるようになります。

例)「おはようございます」→「おあおうおあいあう」
という感じで母音のみで発音するのが母音法です

## サービス紹介
劇団四季も使っている発声練習方法の「母音法」で発声練習ができるサービスです。
練習の管理もできるので毎日の記録をつけながら練習ができます

https://www.boitore.jp/

https://github.com/konjikicity/boitore

## なぜ作った?
僕は幼少期より非常に滑舌が悪く、馬鹿にされることが多くありました。

元記事を表示

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 ``` ネストの表現方法は下のよう

元記事を表示

OTHERカテゴリの最新記事