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

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

配列のプロパティから特定の文字列を含むデータを取得する方法

# はじめに
この記事は、エンジニア経験1年の大学生が実務で勉強になったこと、詰まったことをまとめています。間違っている箇所などがございましたら、指摘していただけると幸いです。
※モデル名やプロパティ名など詳細につきましては、架空のものに変更しております。

# 前提
– Ruby: 2.7.5
– Rails: 5.2.4.6
– Neo4j: 9.2.4

# 経緯
実務では社内で使用するツールの開発に携わっており、「データを更新することができない」と報告があった。原因を調査していくと、特定の文字列を含むURLを入力することで、データの更新ができないことがわかった。
そこで、ビジネスの方と話し合い、バリデーションを追加することになった。既存のデータにも特定の文字列を含むURLが存在するため、rakeタスクで該当の文字列を含むURLを削除することになった。
ただ、その該当の文字列を含むURLを取り出すことに詰まった。

# 失敗した方法

“`
[1] pry(main)> Company.as(:c).where(“c.links =~ ‘.*/hogehoge/.*'”)`

元記事を表示

Rails Cloud9からローカル環境へ(備忘録)2

#前回の続き
時間がだいぶ経ちましたが前回の記事の続きについて記載していきます。

#環境
・macOS BigSur 11.6
・Ruby 2.5.3
・Rails 5.2.6
・Homebrew 3.2.16

#MYSQLのインストール

“`
$ brew install mysql
“`
PASSを通す

“`
$ echo ‘export PATH=”/usr/local/opt/mysql/bin:$PATH”‘ >> ~/.zshrc
“`
設定を反映

“`
$ source ~/.zshrc
“`
MYSQLの起動、接続確認

“`
$ brew services start mysql
%$mysql -uroot
“`

#mimemagicのライセンス更新
“`
$ bundle install
“`
エラー発生

“`
An error occurred while installing mimemagic (0.3.10), and Bundler cannot continue.
Make sure that `gem i

元記事を表示

=は代入だよ。変数は箱だよ。って話【初心者向け解説】

# 概要
プログラミングスクールのメンターをしていて、「記事通りに実装したのにうまく動きません。エラーも出てません」って場合がよくあります。

自分も初心者の頃は何も愚直に記事通りに実装していたのですが、そこからもう一歩進んで、プログラミングを構造的に理解して実装しよう!という内容です。

そもそものコードの意味や、やってることの意味を理解していきましょう!

# 前提
RailsでWebアプリケーションを作成しています。
実装している機能は以下の通りです。
各機能の解説はここでは省きます。Googleさんに聞いてください!

– 投稿機能
– 一覧表示機能
– 検索機能
– タグ機能
– ページネーション機能

要するに複数個の機能をつけているって状態ですね!

# 実際のコード

“`ruby:posts_controller.rb
def index
@posts = params[:tag_id].present? ? Tag.find(prams[:tag_id]).posts : Post.all
@posts = Post.all
@posts = Pos

元記事を表示

rubyの例外処理のまとめ

ruby silverの勉強をしていく中で間違えたところがあったのでその解説記事を挙げていきます。
例外処理は、rubysilverでは、この問題は頻繁に出てくるので重要な問題です。
##例外処理とは?
例外処理とは、
**もともと想定されている値などが入力されたときに、どんな処理をするのか?**を書くことをいうんです。
例えば、よく知られているのはNomethoderror, Nameerror, Argumenterror, Syntaxerror などがありますね。
これも立派な例外処理なんですね。

##例外処理の書き方
結論からいうと、以下のような書き方になります。

“`
begin
実行するコード
rescue
例外が発生した時に、実行するコード
else
例外が発生しなかったときに、実行するコード
end
“`

意外とシンプルなんですね。
では、実際に具体的なコードを書いてみていきましょう!

“`
begin
puts hoge
rescue => e
p e
p e.class # 例外の種類
p e.message # 例外

元記事を表示

アプリを作る ユーザーの更新

##ユーザーの更新
“`
git checkout -b updating-users
“`
###app/controllers/users_controller.rb
“`app/controllers/users_controller.rb
class UsersController < ApplicationController def show @user = User.find(params[:id]) # @user インスタンス変数 # params[:id]の部分はユーザーidの1に置き換わります # Rubyを使ってユーザー名とメールアドレスを表示するにはインスタンス変数であることを前提とするr end def new @user = User.new # 新しくインスタンスを生成 # 新規ユーザーを作る end def create @user = User.new(user_params) # 実装は終わっていないことに注意! if @user.s

元記事を表示

アプリを作る 発展的ログイン機構

###user.rb

“`user.rb
class User < ApplicationRecord # 継承させる attr_accessor :remember_token before_save { self.email = email.downcase } # 保存する前に メアドは小文字にする validates :name, presence: true, length: { maximum: 50 } # nameカラムが存在する # validates(:name, presence: true) VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i # 正規表現 validates :email, presence: true, length: { maximum: 255 }, # 存在性、長さの検証 format: { with: VALID_EMAIL_REGEX },

元記事を表示

【minitest / RSpec】繰り返し表示されている要素の中から「これ」という1件を選んで検証する方法あれこれ

## お題:こんなとき、どんなテストコードを書く?

以下で示すような質問一覧画面の中から、

> 「どのエディターを使うのが良いでしょうか」という質問に表示されている回答・コメント数は2件であること

を検証したい。どのようなテストコードを書けば良いか?

・・・というお題に対して、僕が考える解答例をいくつか提示してみる。

![Screen Shot 2022-01-28 at 19.06.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/ca7b751a-83d4-4ecb-73ba-a2d4203add91.png)

なお、この画面のHTMLは以下のようになっている。

### 繰り返し要素の各枠は `.thread-list-item`

![Screen Shot 2022-01-28 at 20.57.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/2a441abd-46ad-

元記事を表示

Railsのminitestで、ngram検索のテスト実装時に苦戦した話

検索機能の実装時に全文検索を実装する為、Like検索ではなくMySQLのN-gramを用いて実装を行いました。
実装はスムーズにできたのですが、minitest実行時にハマったのでよければ参考にしてください。
N-gram自体が何なのかについては、下記の記事が非常に分かりやすく記載して下さっていたので、参考にしてみてください。
[MySQLでの全文検索(N-gram編)](https://qiita.com/wf-yamaday/items/a123e7b0f79fa799454b#:~:text=N%2Dgram%E3%81%A8%E3%81%AF%E4%BB%BB%E6%84%8F,%E5%BD%A2%E3%81%A7%E8%A1%A8%E3%81%99%E6%96%B9%E6%B3%95%E3%81%A7%E3%81%99%EF%BC%8E&text=%E3%81%A8%E3%81%84%E3%81%86%E5%BD%A2%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99,bigram%E3%82%92%E4%BD%BF%E7%94%A8%

元記事を表示

本番稼働中のRailsアプリでダウンタイムを発生させずにカラム名を変更したい

本番稼働中のRailsアプリで、カラム名を変更したいという状況が最近ありました。
単純に `rename_column :models, :before_column, :after_column` とやろうと思いましたが、こうするとダウンタイムが発生してしまうことが分かりました。
そこでいろいろ調査して、実際に自分がダウンタイムを発生させずにカラム名を変更できた方法を書き残したいと思います。
この他にもやり方はいくつもありそうですが、1つの例として参考にしていただけますと幸いです。

## 環境

– Ruby 3.0.1
– Rails 6.0.4

## 手順

1. カラム追加とデータ移行
2. 既存ロジックの修正とignored_columns指定
3. カラム削除

## カラム追加とデータ移行

### カラム追加

リネーム後のカラムを追加します。

“`ruby
add_column :models, :after_column, :boolean
“`

### データ移行

`before_column` → `after_column` のデータ移行を行いま

元記事を表示

「Ignoring 〜 because its extensions are not built.」が表示されるバグ(メモ)

##環境
– Ruby 2.7.4
– Rails 6.1.4.4

##エラー内容
急にコマンドを叩く度に以下のようなメッセージが表示されるようになった。

“`
・・・
Ignoring nokogiri-1.12.4 because its extensions are not built. Try: gem pristine nokogiri –version 1.12.4
Ignoring racc-1.5.2 because its extensions are not built. Try: gem pristine racc –version 1.5.2
Ignoring racc-1.5.2 because its extensions are not built. Try: gem pristine racc –version 1.5.2
・・・
“`

##解決方法
コマンドプロンプトで以下のコマンドを叩く。

“`
gem pristine –all
“`

処理に少し時間がかかるが解消された。

以上

元記事を表示

[Rails] rspecで個人的に使うよく使うマッチャ

よく使うやつをまとめておいて迷わなくすることが目的。

# 一覧

マッチャ|用途
—|—
eq|内容の完全一致をチェック。“match“も同じ挙動をするが、文字数少ないのでこっち使う。
オブジェクトが同一かまでチェックしたいなら“be“だが、こっちはそうそう使わない。
match_array|“「チェック対象が配列」かつ「順番問わず全要素の中身が全て一致を確認したい」“ときに使う。
include|“「チェック対象が配列」かつ「指定した要素が含まれるかを確認したい」“ときに使う。
contain_exactly|“「チェック対象が配列」かつ「指定した要素群が含まれるかを確認したい」“ときに使う。
change|“<処理>を実行することによる何かしらの変化を確認したい“ときに使う。例えば「“expect(<処理>).to change(<レシーバ>, :<メソッド名>).by(<期待結果>)“」とかくと、「“<処理>を実行したとき<レシーバ>.<メソッド名>の結果が<期待結果>と一致するか?“」というチェックになる。

(意外となかった)

元記事を表示

[Rails] 自分流のrspec(API向け)テンプレート

「APIのテスト書きたいけど、どんな感じでかけばいいのか忘れちゃった!」というときに、とりあえずこのテンプレをコピペしてからコーディングを始めることで超絶時短を狙う。

# テンプレート

**前提**
FactoryBot利用し、Factoryのクラスメソッド実行時に“Factory.“を省略できるような[設定をrails_helperでしている](https://qiita.com/WisteriaWave/items/4ec897ca45047cea3abe)

“`spec/requests/【対象リソース名(スネークケース、複数形)】.rb
require ‘rails_helper’

RSpec.describe “/<対象リソース名(スネークケース、複数形)>“, type: :request do

# xxx_xxxテーブルのレコード設定
## <レコードの説明>
let!(:xxx_xxx1) { create(:, :,…) }
## <レコードの説明>
let!(:xxx_xxx2) { creat

元記事を表示

M1 MacにRuby on Rails 6のDocker環境を構築する

## 概要
M1 MacにRuby on Rails 6のDocker環境を構築する

## 手順

1. 必要なファイルの用意

Dockerfile

“`
FROM ruby:3.0.2

RUN wget –quiet -O – /tmp/pubkey.gpg https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add – && \
echo ‘deb http://dl.yarnpkg.com/debian/ stable main’ > /etc/apt/sources.list.d/yarn.list
RUN set -x && apt-get update -y -qq && apt-get install -yq nodejs yarn

RUN mkdir /app
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
COPY . /app
“`

docker-com

元記事を表示

【個人開発】おもしろTikTok動画とにらめっこするアプリを作りました

## はじめに
笑ってはいけない場面で笑いを堪えるのが苦手なので、耐性をつけるためにおもしろ動画とにらめっこするアプリを作りました。
短時間で笑えるゲームになっているので、気分転換に遊んでみて頂けると嬉しいです!

## 概要
https://niramekko.herokuapp.com

### 1. にらめっこゲーム機能

おもしろTikTok動画とにらめっこするゲーム機能です。
3〜5個の動画でプレイリストが組まれるので、笑いを堪えながら順に再生していきます。
現在以下3つのモードがあります。

– ノーマルモード:ランダムな5つの動画でプレイリストが組まれ、最終スコアを競うモード。
– 道場モード:最も笑われている最新ベストに挑むモード(※1)。
– リベンジモード:過去に笑ってしまった動画に再挑戦するモード(※1 ※2)。

### 2. おもしろ動画共有機能

笑えるTikTok動画を共有する機能です(※2)。
おもしろ動画を見つけて共有しましょう!
投稿した動画が最新ベスト入りを果たすと、総スコア([後述](https://qiita.com/slmk/items

元記事を表示

RailsとVue.js3のSPAアプリにDeepL apiを導入する

ポートフォリオ作りの過程でRails×Vue.js3のSPAアプリにDeepL apiを導入したので過程を初学者視点で紹介します。
開発環境にはdockerを使用しています。

“`
#version
Ruby 3.0.2
Rails 6.0.4
Vue.js3

#開発環境
Docker
docker-compose
“`

# APIで実現したいこと

![スクリーンショット 2022-01-27 20.19.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1640672/fe122651-feb6-82c8-f52e-2918314ab842.png)

上記の画像の「AI翻訳の結果を表示する」ボタンを押すと上部に表示された日本語文を英訳して表示する。

# DeepL apiの登録

https://www.deepl.com/ja/pro-api?cta=header-pro-api/

こちらから登録します。
50,000文字/1ヶ月の制約はありますが無料プランもあります。

登録す

元記事を表示

splitメソッドとそれに関連するメソッドの解説

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485775/e4ed46f9-e4fd-b20f-7f62-cffe9617a99c.png)

ruby silverの勉強をしていく中で間違えたところがあったのでその解説記事を挙げていきます。

#splitメソッド
指定した文字列で分割し、それを配列で返すメソッドです。
基本構文は、
“`
“文字列”.split(区切り文字, 分割数)
“`
論より証拠ということで、実際にコードを見ていきましょう

“`
‘Yamada, Satou, Itou, Suzuki’.split(‘,’)
=> [“Yamada”, ” Satou”, ” Itou”, ” Suzuki”]

‘Yamada, Satou, Itou, Suzuki’.split(‘u’)
=> [“Yamada, Sato”, “, Ito”, “, S”, “z”, “ki”]
“`
1個目の例でいえば、対象の文字列には、「,」があるので、,を目印に区

元記事を表示

Rails7でspring起因でrails consoleが立ち上がらなかった問題の解決方法

# はじめに

現在個人プロジェクトで

– M1 Mac
– Ruby3.1.0
– Rails7.0.1

という環境での開発を試しています。今までは

– Intel Core i7
– Ruby2.x
– Rails6.x

という環境だったので、やはり動くところ、動かないところが出てきます。
(特に、Docker周りは変なバグを踏まないか戦々恐々としています)

今回はRails7のプロジェクトにて、springのバージョンのせいでrails consoleの実行が失敗した件についてです。

# 事象

発生したエラーはこんな感じで、 `bundle exec rails c` を実行した時に発生しました。

“`
/usr/local/bundle/gems/spring-2.1.1/lib/spring/application.rb:103:in `block in preload’: undefined method `mechanism=’ for ActiveSupport::Dependencies:Module

元記事を表示

【Jbuilder】部分テンプレートでハッシュのオブジェクトを使いたい

##前提
@book_managerが配列ではなくハッシュのため、“`json.array!“`が使えない。

##今まで
ファイル名とインスタンス変数名が同じだと
Railsが部分テンプレートを自動的に予測してレンダリングしてくれていたので、
ファイル名など指定しなくても機能していた。

“`api/v1/book_managers/show.json.jbuilder
json.book_manager do
json.partial! @book_manager
end
“`

##訳あってファイル名変更
ファイル名を変更した際、下記の様に部分テンプレートを指定してみたがうまく行かない…

“`api/v1/book_infos/show.json.jbuilder
json.book_info do
json.partial! ‘api/v1/book_infos/book_info’, collection: @book_manager, as: :book_info
end
“`

##うまく行った例

ローカル変数“`book_info“

元記事を表示

Hamlの基本

# はじめに
RailsでWebアプリにPay.jpを用いた決済機能を実装しようとしていました。
実装フローを検索していたところ、Hamlを使ってビューが実装されているドキュメントが多く、興味本位で学習しました。
これから学習しようとしている方の参考になればと学習したことをまとめてみました。

# TL;DL
・RubyをベースとしたHTMLのテンプレートエンジンのこと
・HTMLよりもシンプルに記述できる
・Ruby / Ruby on Railsでも使われている

# 前提知識
・HTML
・Ruby(Rubyがベースになった記法だから)
・Ruby on Rails(Railsで使いたい場合)

# 大枠の使い方
① 拡張子がhamlのファイルを作成する(Ex.index.haml)
② 作成した①をhamlコマンドに通す(Ex. haml index.haml index.html )
③ htmlファイルが生成される(Ex.index.html)

※ hamlのコマンドオプション(よく使うもの)
-f format → アウトプットのフォーマットを指定(html5)

元記事を表示

rails 7.00における “cannot load such file –sassc”の解決法

rails7.0.0の影響によるcssの読み込みができなくなるというエラーに遭遇したので、同じ症状で悩まされている方のためになるかと思い、この記事を執筆しています。

railsの7.0.0が昨年に公開されましたが、以前のようにcssを適用させようとすると書き画像のようなエラーが出ることがあります。
![Inkedエラー画面_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2230776/8799d448-a136-a3fc-ce92-0207c09e080a.jpeg)

このエラーの解決方法は

“`ruby:Gemfile
46 # gem “sassc-rails”
“`

のコメントアウトを削除して、bundle installをすることで解決することができます。
rails7.00以前はこのgemが環境構築の際に自動でinstallされていましたが、7.00以降では標準でインストールされないようです.

元記事を表示

OTHERカテゴリの最新記事