- 0.1. Rails×Nuxtで初期プロジェクトを作成しgitサブモジュールで管理する手順
- 0.2. fileterメソッドを使用してN+1問題を解決した
- 0.3. 【Rails】cocoonを用いたデータを表示する方法
- 0.4. 【Rails】Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
- 0.5. accepts_nested_attributes_forは非推奨だから使わないほうがいいのか
- 0.6. 【Rails】booleanは実質メソッド!?と感じたこと
- 0.7. 【rails入門】javascriptを用いてカーソルを制御する
- 1. ログイン
- 1.1. RuboCop::Cop::Rails::PresenceというRubocupの指摘
- 1.2. 画像キャッシュを部分的に無効化する
- 1.3. ransackを使った検索機能実装
- 1.4. [個人開発]実際に飲食店で使う予約サービスを実務未経験者が1から考え作ってみた。
- 1.5. Ruby を書き始めてハマったこと
- 1.6. 【rails入門】javascriptを用いてチェックボックスの値を維持する Ver-2.0
- 1.7. undefined method `downcase’ for nil:NilClassエラーの対処法
- 1.8. WHERE A and (B or C)をActiveRecordで記述する方法
- 1.9. Rubyで気象庁過去データからのスクレイピング
- 1.10. docker, rails, mysql, skip-javascript, skip-turbolinks, webpackの環境構築
- 1.11. Net::SMTPAuthenticationError (535-5.7.8 Username and Password not accepted. Learn more at)の倒し方
- 1.12. Rails 後からNot null 制約を付与する
- 1.13. 【Docker/MySQL】DBバックアップの取得・復元する手順
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で保存したデータをどうやって表示するのか?
ここからはオリジナルアプリの制作時に実装した方法を紹介します。オリジナルアプリは筋トレ日記です。## ゴールは?
ゴールとしては以下のような表示です
[](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を用いてカーソルを制御する
# はじめに
皆さんこんな経験ありませんか?
—
ログインするときメールアドレスの次にパスワードを入力しようとしたけど、保存してるパスワードとか予測変換とかでパスワードの入力欄が隠れてしまう!!
—
# 今回やること
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を深掘りするため、ユーザー画像とアイテム画像を合成させて、簡易的に試着ができるという機能を実装していた。

上の画像はパンツの画像とユーザー画像を合成させているが、それぞれのアイテムページから試着ページに遷移するとそのアイテムの画像とユーザーの画像が合成されるという機能で、
例えばジャケットのページで試着ボタンを押すとジャケットの画像とユーザー画像が合成される様になっている。が、
ローカル環境では問題なく動いていたのに、AWSにアップロードした後試着ページを表示させると一番最初に合成した画像が別の試着ページに遷移しても表示されてしまい、二回目以降は試着できなくなってしまった。
[
@s
[個人開発]実際に飲食店で使う予約サービスを実務未経験者が1から考え作ってみた。
# はじめに
この度、実際に飲食店で使っている予約サービスをリリースしました!
##### サービスを作ったきっかけ
私が以前手伝いをしていた個人経営の小規模な飲食店では事前の来店数を把握したいが予約受付は営業時間内の電話のみ。予約来店が少ないという課題を実感していました。
その解決策として、お店の要望に沿った予約サービスを開発しました!実際に使えるような予約システムの参考資料がなく苦労しましたが、初心者なりに1から考え、実装してみました。
# サービス概要
一般ユーザーの予約来店を促し、管理ユーザーの業務効率化を図るサービスです。https://www.lunchcafeocean.com/
こちらは公開用のクローンサイトです。
実際に使っているものと機能は基本的には同様です。
ゲストログインボタンからは管理画面に
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
<%=
undefined method `downcase’ for nil:NilClassエラーの対処法
開発環境
mac OS バージョン11.6
エディタ
VScode# やりたいこと
gravataを使ってUserのアイコン画像を表示させる。Users#indexのページを表示させたい。
# エラー内容
“`
undefined method `downcase’ for nil:NilClass
“`
# 原因
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形式でしか配信されておりません。
この平均気温の行を取得してきて合計します。(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 = trueconfig.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コンテナに接続しバックアップ作業を行います。
# 作業内容
## Dockerコンテナにログイン
バックアップ取得、復元作業はコンテナ内で行います。“`
docker exec -it DBコンテナ名 bash
“`## バックア