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

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

【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
<%=

元記事を表示

undefined method `downcase’ for nil:NilClassエラーの対処法

開発環境
mac OS バージョン11.6
エディタ
VScode

# やりたいこと
gravataを使ってUserのアイコン画像を表示させる。

Users#indexのページを表示させたい。

# エラー内容
“`
undefined method `downcase’ for nil:NilClass
“`

![f6f2ba52cfc2771cff05373e7dfa3311.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1962714/aff9e721-4368-450c-f37f-21f83bad0d63.png)

# 原因
Usersテーブルの中にあるレコードについて、emailがnilのデータが混入していることが考えられます。
.downcaseはemailカラムの文字列を全て小文字に変換する処理で、emailがnilだと変換できないのでエラーになります。

# 解決策
“`raill c“`でemailがnilになっているデータがないか確認し、あったらdestro

元記事を表示

WHERE A and (B or C)をActiveRecordで記述する方法

Railsアプリケーション開発中に、`WHERE A and (B or C)`のようなSQLをActiveRecordのデータアクセスメソッドで書くときにどうすれば良いのか少しハマったのでメモとして残します。

“`sql:SQL
SELECT *
FROM model
WHERE A and (B or C) ;
“`

# 結論
`merge`メソッドを使用する。
括弧に該当するメソッドが`merge`メソッドとなる。
“`ruby:ActiveRecord
Model.where(A).merge(where(B).or(where(C)))
“`

# 例: ポケモン
例えば、こんな感じのポケモンテーブルがあったとする
“`ruby:db/migrate/pokemon.rb
class Pokemons < ActiveRecord::Migration[5.2] def change create_table :pokemons do |t| t.string name t.string type end en

元記事を表示

Rubyで気象庁過去データからのスクレイピング

# 今回の目的
職場の農業法人で25ha全43枚の畑の管理を任されていまして、枚数と種類が多すぎて作業の管理が不可能でした。
そこで、定植日からの積算温度(1日の平均気温を積算した値)一瞬で確認できるものがあれば便利だと思い作ってみました。

# なにをするのか

https://www.data.jma.go.jp/obd/stats/etrn/index.php

こちらから情報を頂いてきます。天気予報のAPI(ぽいもの)は配信されているようですが、過去の気象データはこの表かcsv形式でしか配信されておりません。
![スクリーンショット 2022-04-14 20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2512596/745abb7c-9c96-538d-d4a2-803d5b87dd28.png)

この平均気温の行を取得してきて合計します。(0度以下は0として扱う)
Mechanizeを使ってスクレイピングします。

# ソースコード

“`ruby:
require “Mecha

元記事を表示

docker, rails, mysql, skip-javascript, skip-turbolinks, webpackの環境構築

jsを触る機会が増えてきたので、Dockerを使って環境構築の練習中です。
いろいろ手探りでやってみた結果、一応、dev環境は動くようになった。

# docker, rails, mysql, skip-javascript, skip-turbolinks, webpackの環境構築

ファイル全体は、 https://github.com/kkosuke/2022-04-14-rails-demo を参照してください。

## rails

### 任意のディレクトリ内で…
“`
rails-demo $ touch {Dockerfile,docker-compose.yml,Gemfile,Gemfile.lock,entrypoint.sh}
“`

### docker-compose.yml
“`
version: ‘3’
services:
demo_db:
container_name: demo_db
image: mysql:5.7
environment:
MYSQL_DATABASE: root
MY

元記事を表示

Net::SMTPAuthenticationError (535-5.7.8 Username and Password not accepted. Learn more at)の倒し方

Action_Mailerを使い、gmail経由でメール送信したかったが、`Net::SMTPAuthenticationError (535-5.7.8 Username and Password not accepted. Learn more at)`が連発してのでメモリます。

## 結論

user_name と password は環境変数におくべし。

## 実際のコード

ガイドにある通りconfig/environments/development.rb に以下を追加

“`ruby
# MailCatcher Configuration
config.action_mailer.raise_delivery_errors = true

config.action_mailer.perform_caching = false

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = { address: ‘smtp.gmail.com’

元記事を表示

Rails 後からNot null 制約を付与する

テーブルのカラムに、後からNot null 制約をつける手順を書いていきます。

まず、新たに Not null 制約を付与するためのマイグレーションファイルを作成します。

“`
rails g migration ChangeCloumnsNotnullAddテーブル名
“`

“`
# rails g migration ChangeCloumnsNotnullAddMovies
“`

マイグレーションファイルを作成

“`db/migrate/***_change_columns_add_notnull_on_movies.rb
class ChangeCloumnsNotnullAddMovies < ActiveRecord::Migration[6.0] def change change_column :users, :title, :string, null: false change_column :users, :image, :string, null: false change_column :users, :re

元記事を表示

【Docker/MySQL】DBバックアップの取得・復元する手順

# はじめに
RailsアプリケーションでDBにMySQLを使用して開発しており、DBのデータを一時的に残して作業をしたいことがありました。
本記事では、バックアップと復元方法の手順を記述しています。

## 前提
Ruby: 2.7.3
Rails: 6.1.5
MySQL: 8.27
Docker: 20.10.5

## 開発環境構成図
docker-composeコマンドを実行してRailsコンテナとDBコンテナを立ち上げています。
今回はDBコンテナに接続しバックアップ作業を行います。

![スクリーンショット 2022-04-14 12.45.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230985/fd454282-2038-cc13-aff6-bdea0038de0a.png)

# 作業内容
## Dockerコンテナにログイン
バックアップ取得、復元作業はコンテナ内で行います。

“`
docker exec -it DBコンテナ名 bash
“`

## バックア

元記事を表示

【備忘録・Rails】Mysql2::Error: Specified key was too long; max key length is 767 bytes エラーを解決する方法

## はじめに

こんにちは、だいごです。
今回はタイトルのエラーを解決する方法をまとめていきます。
よかったらご覧ください。

## エラーについて

まず、今回発生したエラーはターミナルにて**rails db:migrate**を実行した際に発生しました。
エラー文は以下に記します。

“`zsh:ターミナル
ユーザー名@コンピュータ名 カレントディレクトリ % rails db:migrate

# エラー文
== 20220413235353 DeviseCreateUsers: migrating ================================
— create_table(:users)
-> 0.1096s
— add_index(:users, :email, {:unique=>true})
rails aborted!
StandardError: An error has occurred, all later migrations canceled:

Mysql2::Error: Specified key was too lo

元記事を表示

Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)’ has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)’ instead.という警告

railsコマンドを実行するたびに下記の警告文が出てきます。

“`
# rails db:migrate
Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)’ has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)’ instead.
“`

ここではこの警告を出なくさせる方法を書いていきます。

参考:https://github.com/rubygems/rubygems/issues/5234

# 解決策
どうやらbundlerのversionを変えると出てこなくなるみたいです。

参考記事によると
Also, just to make sure there’s an easy way out of this posted here, running

“`bundle _2.3.3_ update –bundler“`

と書いてあるので、今のversi

元記事を表示

link_toとform_tagのデフォルトメソッドについて。

## 結論

“`link_to“` メソッド -> “`GET“`メソッドがデフォルト。
“`form_tag“`メソッド -> “`POST“`メソッドがデフォルト

### link_toメソッド
下記のようなroutes.rbメソッド違いの同じURLが存在する時、postメソッドのURLにリンクするためには“`{method:”post”}“`が必要です。(“`{method:”post”}“`がないと、getメソッドのパースにリンクされてしまう。)

“`routes.rb
post “posts/:id/destroy” => “…”
get “posts/:id/destroy” => “…”

“`
“`show.html.erb
<%= link_to (”destroy",”/posts/#{@post.id}/destroy),{method:"post"}) %>
“`

### form_tagメソッド
form_tagメソッドですと、“`post “posts/:id/destroy” => “…”

元記事を表示

【rails入門】javascriptを用いてリロードしてもチェックボックスの値を維持する(本題)

# やりたいこと
リロードしてもチェックボックスの値を維持する
### 実装したらこんな感じ

![F6A423F6-1560-42D2-BB05-C1124C3AB16E_1_105_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2586059/40ce2d62-f899-5192-fced-6059f64e4d50.jpeg)

# 仕組み(ゴリ押し)
1. javascriptで全てのcheckboxのtrue/falseをリストに格納
1. そのリストを「次へ」ボタンが押されたときにコントローラに送り、保存する
1. 「次へ」ボタンを押したらリロードするので、その時にデータベースから最新のcheckbox情報が入ったレコードをviewに渡す
1. 受け取ったリストに基づいてjavascriptを用いてチェックをつけていく
# 実装
checkboxがtrueかfalse保存する用のモデル作成!
1行ずつ実行してください
“`ruby:ターミナル
rails g model Check 

元記事を表示

Mailerでmissing templateになってしまった

![スクリーンショット (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2525610/951586bb-b754-8987-fa59-ba2c02f6e599.png)

https://qiita.com/ki_87/items/67f8965e8de17e95ac1c

コチラのサイトを参考にさせていただきメールの送信機能を実装しました。
ですが、上記のエラーが出てしまいました。なぜ。。。。

###### こいつは馬鹿です

いや誤字はない。どこが。。。おかしいんだ。。。

###### こいつは馬鹿です

何で!なんで!お父さん帰ってこないんだよ!!

###### ※関係ありません

答えは簡単。
彼は見落としていました。

~~~view/contact_mailer/send_mail.text.erb
===============================
<%= @mail_title %>
===============================

元記事を表示

【Docker】駆け出しエンジニアがDocker公式チュートリアルに躓きまくった件

可能な限りDocker公式が提供しているチュートリアルに沿って、Ruby on rails + MySQLの環境構築を行います。

## はじめに
こんにちわ、2022年4月よりエンジニアとして働き始めたばかりのUdai(ゆうだい)です!

今回は、Docker公式チュートリアルを行った際に大量のWorningやErrorに苦しんだので、これからチュートリアルに訪れる初学者の同士が同様に躓かないようにと思い筆を取りました。

如何せん、私はまだまだ駆け出しのエンジニアですので、本記事はDockerを知らない人や名前だけは知っているよといった初学者向けの記事となっております。そのため、粒度はかなり細かいものとなっております。

また、それでも一読してくださる寛大なシニアなエンジニアの先輩方は記事の内容に誤りがございましたら、遠慮なく指摘・訂正していただけると幸いです。

※ 注意点
– チュートリアルとデータベースが異なります。(PostgreSQLからMySQLへ変更)
– 手早く同上の環境構築を行いたい方は他の素晴らしい記事を参照してください。

## 対象
– 実際にDockerを

元記事を表示

LINE連携でngrockが使えへんやないかーい!!

# この記事について

LINE連携でローカルのサーバーを外部公開するためにngrockを使おうとしたけど使えかったので、現在代わり使っているサービスを紹介する記事。(railsでの連携)

「ngrockの使い方をメモ代わりにQiitaに掲載してよかったー」と思っていた矢先、使えなくてガッカリ。。。

https://qiita.com/ashketcham/items/c743e31f818534b828be

## ngrock
LINE公式に問い合わせている方がいっらしゃいました。

https://www.line-community.me/ja/question/5f07c0fb851f74ab9c18e8dc/ngrok%E3%81%A7%E5%A4%96%E9%83%A8%E5%85%AC%E9%96%8B%E3%81%97%E3%81%9Furl%E3%81%A7webhook%E6%A4%9C%E8%A8%BC%E3%82%92%E6%88%90%E5%8A%9F%E3%81%95%E3%81%9B%E3%81%9F%E3%81%84

# 代わりのサービス –

元記事を表示

Railsのjsファイルで画像パスを指定するとき

## はじめに

Railsではassetsがコンパイルされるため、パスが開発環境と本番環境で異なる。Railsの場合は`asset_path`をつければよく、sassの場合も`image-url`をつければよい。

“`rb
# asset_pathをつければコンパイルされていても問題ない。
asset_path(‘assets/hoge/fuga.png’)
“`

ただ、JSで画像パスを指定する場合は`asset_path`や`image-url`のように指定できない。そのため画像パスの指定の仕方で少しハマった。

## 解決

画像ファイルのパスを`import`すれば良い。すると`fugaIcon`のパスが`pack/~~~/`とpackから始まるパスが生成される。

“`js
import fugaIcon from ‘../../../assets/images/hoge/fuga.png’;
“`

元記事を表示

【Rails】cloneしてきたアプリケーションを動かす手順【GitHub】

## はじめに
学習を始めて間もないです。
間違っていること等ございましたらお知らせください!
気をつけていますが特に用語の使い方が正しくない可能性があります。

一つ前の記事でcloneしてきたアプリ(jQuery導入済み)を、
自分の環境ではきちんと動作するまでこんな手順をふんでいますという紹介です。
(出てきたエラー内容やターミナルの指示に従っているだけなので大したことはしてません)

## 対象の方
cloneしてrails sしたらエラーが出てわからない!って方

jQueryが正常に動いてたアプリをcloneしたけど新しくcloneした方はなんだかちゃんと動かないって方向け

これはかなり限定的かと思われます!
(途中まではjQuery関係ないはず…)

## 環境
Rails: 6.1.5
Ruby: 2.6.3
Git: 2.32.0
ローカル環境: cloud9

## 簡単に手順
1. rails db:migrate
2. webpacker:install
3. webpacker:compile
4. jQuery使えるように文言足す
4. rails s
4

元記事を表示

【Git】【GitHub】コミット履歴を引き継がずgit cloneする方法 後半無駄に丁寧に解説しています

## はじめに
学習を始めたばかりです。
気をつけていますが用語などもちょこちょこ間違っているかもしれません。
色々間違ったこと等ございましたらぜひ教えて下さい!

あと、もしかしたらもっとシンプルな方法があるのでは?と思っています。
今回のやり方はものすごく遠回りをしているかもしれません。

ただ、たくさんコミット履歴を持ってるリポジトリのcloneに時間がかからない方法だそうです!◆理由は後述します。
(今の所私にそんな機会は全くありませんが笑)

### こちらのサイトをとても参考にさせいただきました!!!
[Gitで別のRepositoryにpushするときに今までのcommit履歴を残さない方法
](https://www.greptips.com/posts/1270/)

後日、自分がこの手順でRailsアプリをcloneした後に行っている手順もせっかくなので書きます。
(cloneしたアプリによって手順は変わると思いますし、そもそも大したことはしてません!webpacker:installとか基本的なやつです)
追記:[書きました!](https://qiita

元記事を表示

Rails + React + docker-compose をcapybaraで操作するのにハマった記録

初投稿です。

理解してしまえば簡単なのですが…
結構な時間ハマったので記事に残しておきます。

参考にさせていただいた記事↓ありがとうございます

https://qiita.com/ijufumi/items/badde64d530e6bade382

# 今回の目的
現在、React+Railsのアプリケーションをdocker-composeの環境で制作していまして、
E2Eテストを行うにあたって、Rails側からcapybaraとseleniumを使って操作が必要でした。

# ハマった箇所
dockerコンテナ内からホストOSのlocalhostに接続するという概念。
そもそもdockerの仕組みをよく理解して使っていなかったのが問題でした。

“`:docker-compose.yml
chrome:
image: selenium/standalone-chrome-debug:latest
ports:
– 4444:4444
– 5900:5900
“`
docker-compose.ymlに上記を追加
テスト中の様子

元記事を表示

DockerでRails(web)が立ち上がらずにExit 127と出る場合の対処法

# 経緯
`docker-compose run up`などでコンテナを起動させると、dbは立ち上がるが、Rails(web)のほうが立ち上がらず、`docker-compose ps`で起動状態を確かめると `Exit 127`と表示されました。

# 結論
`docker-compose.yml`ファイル内の文法ミス

# 原因
まず、なぜ`Exit 127`という状態になるのか考えました。
最初に、dockerで終了したコンテナのログを見てみます。
“`
xxx_db_1 docker-entrypoint.sh postgres Up 5432/tcp
xxx_web_1 entrypoint.sh bash -c rm – … Exit 127
“`
つぎに、`xxx_web_1`のログを見てみます。
“`
% docker logs xxx_web_1
bash: line 1: bin/rails: No such file or directory
“`
`bin/rails` というファイルやディレクトリがありません

元記事を表示

OTHERカテゴリの最新記事