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

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

GemfileでグローバルインストールするGemを管理する

普段プロジェクトごとにGemfileを管理していますが、システム全体で使うGemもGemfileで管理したいと思い方法を調べました。

## 環境
Mac OS Big Sur 11.6
Bundler 2.2.32
Ruby 3.0.2
Gem 3.2.22

## 結論

好きな場所にGemfileを作成して

“`ruby
bundle install –system
“`

これだけでシステム全体でGemが使えるようになります。

## 保存場所

自分の場合は[rbenv](https://github.com/rbenv/rbenv)を使いバージョン管理をしています。

そこで、 `Gemfiles` というフォルダを作り、その下でバージョンごとに管理することにしました。

“`ruby: 好きな場所
Gemfiles
├── 2.6.3
│   └── Gemfile
│   └── Gemfile.lock
├── 2.6.6
│   └── Gemfile
│   └── Gemfile.lock
└── 3.0.2
└── Gemfile
 

元記事を表示

?CircleCiで、Rails6のRspecのSYSTEMテストを実行する方法【Docker】

# ✅当方の環境
– 開発環境 : Docker
– ruby 2.7.5
– rails 6.1.5
– Circle Ci

# ✅前提条件
:::note warn
「selenium-webdriver」をアプリ(WEB)のコンテナに導入したのではなく、アプリ(WEB)のコンテナとは別の「selenium-webdriver」のDockerコンテナを新しく作成・起動させて、SYSTEMテストを実行した場合に、本記事が有効である
– アプリ(WEB)のコンテナに、直接「Chome-driver」を導入した場合などは、本記事は対象外
– [こちらの記事](https://qiita.com/felmy/items/d4b1334a6adee071ef46)で「selenium-webdriver」を導入した場合は、以降の内容を試してみてください
:::

# ✅概要
:::note alert
Circle Ciで使用する「自分で設定したイメージファイル」と、「自分で設定したDockerのイメージファイル」は、別々でお互いに共有されないため、Circle Ciの環境をDockerの

元記事を表示

DockerでRuby on Railsの環境を構築する際のentrypoint.shのコマンド及びコード理解

## なぜ記事を書こうと思ったか
前回の記事のRails用のDockerfileを作成する際にentrypoint.shを指定していますが、今回そのentrypoint.shのコマンド及びコードの理解を備忘録として残すため。

– [DockerでRuby on Railsの環境を構築する際のDockerfileのコマンド及びコード理解](https://qiita.com/zakino123/items/5e7ddf96096156ef814f)

## entrypoint.shのコマンド説明
entrypoint.sh
“`
#!/bin/bash
set -e

# Remove a potentially pre-existing server.pid for Rails.
rm -f /app/tmp/pids/server.pid

# Then exec the container’s main process (what’s set as CMD in the Dockerfile).
exec “$@”
“`

以下にコマンド及びコードの解説を致しま

元記事を表示

【備忘録・Rails】devise導入で使えるメソッド

## はじめに

こんにちは、だいごです。
今回は、deviseを導入することで使えるようになるメソッドをまとめていきます。
よかったらご覧ください。

## ヘルパーメソッド一覧

– **before_action :authenticate_user!**
– **user_signed_in?**
– **current_user**
– **user_session**

※モデル名がuserの場合を想定しています。 

ここからは一つ一つを詳しく解説します。

### before_action :authenticate_user!

ログイン状態によって表示するページを切り替えるdeviseのメソッド。
処理が呼ばれた段階で、ユーザーがログインしていなければ、そのユーザーをログイン画面に遷移させます。

“`rb:messages_controller.rb
class MessagesController < ApplicationController before_action :authenticate_user! def index end

元記事を表示

pagyを日本語化してみる

# はじめに
railsにページネーションを導入するにあたり、
kaminariより新しく諸々いい感じらしい評判を聞いたので
pagyを導入してみた。

https://github.com/ddnexus/pagy

# 実装について
初学者故、相当つまづいたがどうにか導入。

参考にした記事

https://qiita.com/white0221/items/d5a0386882943131df77

https://qiita.com/yama_diary/items/8eabcdad3bb88a8eae60

で、表示を日本語化したいものの導入記事が見つからなかったので
備忘録的に記事化したという流れです。

# pagy日本語化
下記内容順で書けばできる、はずです。。。
(自分は時間表示を既に日本語化していたので後半だけやりました)

“`ruby:config/application.rb
module Hoge #ちょっと前まではこのhogeすら何やら分かりませんでしたが。。。
class Application < Rails::Application

元記事を表示

Rails お気に入りランキング実装

この記事は学習中に実装した内容をアウトプットし、更に理解を深めるための記録用投稿になります。
投稿している内容と同じ箇所で躓いている方に少しでもお力添えできれば幸いです。

## 実装した内容
今回はユーザーが投稿した内容に複数のユーザーがお気に入り(いいね)をし、そのいいね数の多い順番にランキング形式で表示する内容になります。

## 前提条件
・投稿した記事のテーブル名はdishesとします。
・いいね機能のテーブル名はfavoritsとします。
・いいね機能を実装済み

## モデル
コントローラで使用するためのメソッドをモデルに記述します。
コントローラの記述を長くしないようにするためのようです。モデルの使い方を再確認!

*/app/models/dish.rb
“`ruby
def self.create_all_ranks
Dish.find(Favorit.group(:dish_id).where(created_at: Time.current.all_week).order(‘count(dish_id) desc’).limit(10).pluck(:

元記事を表示

今日からWEB開発 1日目

はじめまして。エンジニアを目指しているPIROSHKIです。

今日からWEB開発ということで、勉強しながら1つWEBアプリの開発を目指していきます。
超初心者なので長い道のりですが、皆さんの記事を見ながら頑張ります。

少し前に学校で学んだRubu Railsを使って開発をしようと思っています。

早速RubyとRailsのインストールから

①Rubyのインストール
https://www.ruby-lang.org/ja/downloads/
色々なバージョンがあってよくわからないので最新の3.1.1-1をダウンロード

②Rlaisのインストール
  コマンドプロンプトで
  gem install rails 
  を実行。

③作成するアプリ名のフォルダを作成
 rails new アプリ名

 ・・・・
 とここで、

 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607524/8c4cfd31-bb9e-e5eb-3143-dba7ada7e94f.png)

元記事を表示

Rails×Nuxtで初期プロジェクトを作成しgitサブモジュールで管理する手順

## はじめに

Docker環境下のフロントエンド(Nuxt.js)とバックエンド(Rails API)を別々のリポジトリとして切り分けてみたい。となった際に、サブモジュール化する手順を学びました。

本記事では、「Rails×Nuxtで初期プロジェクト作成し、サブモジュール化するまでの流れ」を備忘録的にまとめています。

#### 実行環境
– macOS Catalina: 10.15.4
– docker version: 19.03.13

### 目次

– git submodulesの概要
– docker環境構築
– APIモードでrails×mysqlの初期プロジェクトを作成
– nuxt初期プロジェクトを作成
– サブモジュール化

### 最終的なディレクトリ構造

“`
./
├── .gitmodules
├── docker-compose.yml
├── api/
│   ├── Gemfile
│   ├── Gemfile.lock
│   ├── Dockerfile
│   ├── environments
│   | ├── db.en

元記事を表示

fileterメソッドを使用してN+1問題を解決した

次の状況でN+1問題が発生しておりました。その解決方法になります。

“`ruby:model/model1.rb
class:Model1
has_many :model3s,
has_many :model2s, through: :model3s
“`

“`ruby:model/model2.rb
class:Model2
has_many :model3s,
has_many :model1s, through: :model3s
“`

“`ruby:model/model3.rb
class:Model3(Modle1とModle2の中間テーブル)
belongs :model1
belongs :model2
“`

“`ruby:controllers/sample_controller.rb
@model1 = Model1.eager_load(:model3s)
“`

“`ruby:views/sample.html.erb
# model2_idはループで回される値
   @model1.where(model3s: { [

元記事を表示

【Rails】cocoonを用いたデータを表示する方法

# cocoonとは?
cocoonとはフォームの追加や削除の実装を行う時とても便利なgemです。
個人的には以下の記事が大変参考になったのでこちらをご参照していただければと思います。

https://qiita.com/kmjooh/items/a1613531873a22fa7862

# cocoonで保存したデータをどうやって表示するのか?
ここからはオリジナルアプリの制作時に実装した方法を紹介します。オリジナルアプリは筋トレ日記です。

## ゴールは?
ゴールとしては以下のような表示です
[![Image from Gyazo](https://i.gyazo.com/7a0c1f8fbfaa0a9bbd415f3201442012.png)](https://gyazo.com/7a0c1f8fbfaa0a9bbd415f3201442012)
これはオリジナルアプリの一覧表示の一部ですが、種目・重量・回数・セット数はcocoonを用いてフォームを追加・削除したりして複数のデータを保存できるようにしています。

## まず日記の一覧表示はどのように実装されているのか?

元記事を表示

【Rails】Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

## 開発環境
Rails6.1.4
Ruby3.0.1
macOS Monterey 12.2.1

## エラー内容

gem(rinku)を“`bundle install“`しようとしたら、いきなりエラーが発生してインストールできなくなった?

“`terminal:terminal
Installing rinku 2.0.6 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory: /Users/apple/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/rinku-2.0.6/ext/rinku
/Users/apple/.rbenv/versions/3.0.1/bin/ruby -I /Users/apple/.rbenv/versions/3.0.1/lib/ruby/3.0.0 -r
./siteconf20220416-552-xpdj2a

元記事を表示

accepts_nested_attributes_forは本当に非推奨なのか

※`accepts_nested_attributes_for` の使い方を説明する記事ではないです。

### 概要
`rails accepts_nested_attributes_for`でググると`非推奨`がサジェストされたり、これを使わずに別の方法を取っているような記事が複数ヒットします。

私自身も結構前にコードレビューで「非推奨だよ〜」みたいなコメントをもらったことがあり、その時はそのまま直さなかった気がするのですが、また実装する機会があったので今どういう状況なのか改めて調べてみました。
チーム開発での話なので、個人で使う使わないは自由にしてください。

### いつ誰が非推奨と言ったか

非推奨なら普通`deprecated`の警告が出ますよね?
非推奨のソースってどこなんでしょう。
↓ここのようです。

https://github.com/rails/rails/pull/26976#discussion_r87855694

> dhh on 15 Nov 2016
>
> I’d actually like to kill accepts_nested_at

元記事を表示

【Rails】booleanは実質メソッド!?と感じたこと

# はじめに

Railsアプリケーション開発中にbooleanのカラムに対してこんなコードに遭遇した

“`ruby:db/migrate/create_post.rb
class Posts < ActiveRecord::Migration[5.2] def change create_table :posts do |t| t.string name t.boolean draft, comment: '下書き' end end end ``` ```ruby:post.rb // 下書きがどうかを判定するメソッド def draft? draft == 1 end ``` ## マジックナンバーは使用しない まず大前提としてマジックナンバーの使用は避けた方が良い。保守性に影響がでてしまう。 https://qiita.com/daichi0713/items/d838eda12a664bc04542#4%E3%83%9E%E3%82%B8%E3%83%83%E3%82%AF%E3%83%8A%E3%83%B3%E3%8

元記事を表示

【rails入門】javascriptを用いてカーソルを制御する

# はじめに
皆さんこんな経験ありませんか?

![スクリーンショット 2022-04-15 11.41.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2586059/eddd0af0-5dbb-3b62-1aca-e1fd8cc94197.png)

ログインするときメールアドレスの次にパスワードを入力しようとしたけど、保存してるパスワードとか予測変換とかでパスワードの入力欄が隠れてしまう!!

# 今回やること
javascriptを用いてメールアドレスを入力し終わってenterを押すと自動でパスワード入力欄にカーソルが合わさるようにする

# 早速やっていきましょう!
前提としてrailsでdeviseというGemを使用してログイン機能を実装しているとします!
### 1.現状のコード
“`html:views/users/sessions/new.html.erb

ログイン

※登録したメールアドレスとパスワードを入力してください。

<%=

元記事を表示

RuboCop::Cop::Rails::PresenceというRubocupの指摘

Rubocupでリファクタリングをしていたところ、モデルのメソッドで次の指摘を受けました。

“`ruby:models/sample.rb
C: [Correctable] Rails/Presence:
Use [別テーブルのidを格納した配列を弄る処理].presence || []
instead of [別テーブルのidを格納した配列を弄る処理].blank? ? [] : [別テーブルのidを格納した配列を弄る処理]
変数 = [別テーブルのidを格納した配列を弄る処理] ? [] : [別テーブルのidを格納した配列を弄る処理]
“`

元の記述は配列を処理した結果、空配列であれば空配列を、そうでなければ処理した結果の配列を返すという単純なものですが、同じ記述を2回繰り返す点でDRY原則に沿った書き方ではありませんでした。

今回の指摘で簡潔に書けることがわかりましたが、これまで見かけない記述でしたのでまとめておきます。

## 短絡評価について

https://qiita.com/gyu-don/items/a0aed0f94b8b35c43290

>||の

元記事を表示

画像キャッシュを部分的に無効化する

Imagemagickを深掘りするため、ユーザー画像とアイテム画像を合成させて、簡易的に試着ができるという機能を実装していた。

![9ab908fcf945ef3911f996ea2d4757e7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2584427/6c34fefb-aa1f-127b-cdc3-432f7e5790ba.jpeg)

上の画像はパンツの画像とユーザー画像を合成させているが、それぞれのアイテムページから試着ページに遷移するとそのアイテムの画像とユーザーの画像が合成されるという機能で、
例えばジャケットのページで試着ボタンを押すとジャケットの画像とユーザー画像が合成される様になっている。

が、

ローカル環境では問題なく動いていたのに、AWSにアップロードした後試着ページを表示させると一番最初に合成した画像が別の試着ページに遷移しても表示されてしまい、二回目以降は試着できなくなってしまった。

[![Image from Gyazo](https://i.gyazo.com/

元記事を表示

ransackを使った検索機能実装

この記事は勉強した内容をアウトプットし、理解を深めるための学習用記事になっています。
説明の間違えている点などありましたらご指摘いただけると幸いです。
# ransackを使った検索機能実装について

## 実装手順

#### 1. gemに’ransack’を追加してインストール
“`ruby
gem ‘ransack’
“`
“`ruby
$ bundle install
“`
bundle install後にサーバーを立ち上げ直すのを忘れていて30分くらいエラーで引っかかりました、、、
bundle install後にはrails sを忘れずに!

#### 2. コントローラでの記述
このときに私は事前に投稿の一覧を表示させるとずっと勘違いしていました。なので投稿一覧用の変数# @dishes = Dish.allを準備していました。
調べているとransackではデフォルトで一覧画面できるみたいです!
“`ruby
def index
# @dishes = Dish.all
@q = Dish.ransack(params[:q])
@s

元記事を表示

[個人開発]実際に飲食店で使う予約サービスを実務未経験者が1から考え作ってみた。

# はじめに

この度、実際に飲食店で使っている予約サービスをリリースしました!

##### サービスを作ったきっかけ
私が以前手伝いをしていた個人経営の小規模な飲食店では事前の来店数を把握したいが予約受付は営業時間内の電話のみ。予約来店が少ないという課題を実感していました。
その解決策として、お店の要望に沿った予約サービスを開発しました!

実際に使えるような予約システムの参考資料がなく苦労しましたが、初心者なりに1から考え、実装してみました。

# サービス概要
一般ユーザーの予約来店を促し、管理ユーザーの業務効率化を図るサービスです。

https://www.lunchcafeocean.com/

こちらは公開用のクローンサイトです。
実際に使っているものと機能は基本的には同様です。

![Home画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1870530/6e19c4d4-a66c-daf3-fe67-5815f14a7b6d.png)

ゲストログインボタンからは管理画面に

元記事を表示

Ruby を書き始めてハマったこと

## `String` なのか `Symbol` なのか

Ruby には `Symbol` という、文字列の皮を被った数値があり、少メモリで高速なことから、`Hash` のキーとかでよく見かけます。

自分で作った `Hash` であれば誤解はないですが、メソッドから生成された `Hash` のキーが `String` だったりすると、キーを指定しても `nil` が返ってきて、「俺が入れたデータが無くなっとる!」と焦ります。

### `JSON.parse` は `symbolize_names: true` をつけると `Symbol`

`JSON.parse` でそのままだと、キーは `String` になる。

“`ruby
JSON.parse(‘{“name”:”tanaka”,”age”:19}’)
=> {“name”=>”tanaka”, “age”=>19}
“`

`symbolize_names: true` をつけるとキーが `Symbol` になります。

“`ruby
SON.parse(‘{“name”:”tanaka”,”age”:19}

元記事を表示

【rails入門】javascriptを用いてチェックボックスの値を維持する Ver-2.0

# はじめに
この記事は以前投稿した[【rails入門】javascriptを用いてリロードしてもチェックボックスの値を維持する(本題)](https://qiita.com/Naoya_pro/items/c3e8c450302aca6053f4)という記事でやっていたことと同じことをよりスマートに書いたものです!
プログラミング初心者の僕にコメントでご教授いただいたことに感謝してこの記事を書いています!それでは早速やっていきましょう!!
# 現状とやりたいこと
* ゲーム名がランダムで1つ表示されるようなガチャを作りたい
* タグ検索機能を使ってジャンルを絞り込めるようにしたい
* 絞り込む時に使用するチェックボックスを**リロードした時も、リロード前と同じ値を維持したい**

今回は3つ目の`リロードした時も、リロード前と同じ値を維持したい`これをやっていきます:scissors:

![Something went wrong]()

## 1.今のチェックボックス
現状こんな感じでチェックボックスをrailsで作っています
“`ruby:gatya.html.erb
<%=

元記事を表示

OTHERカテゴリの最新記事