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

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

【テーブル?】railsのモデルやデータベースが何をしているのか分からない人へ【migration?】

# 前説
Railsのモデルやデータベース関係で何をしているのか分からず困っている方向けに、railsにおけるデータの扱い方について説明していきたいと思います。よろしくお願いします。

### この記事の最終目標
1. テーブルの意味を理解する
1. migrationファイルル/schemaファイルと、rails db:~コマンドの役割を理解する
1. Modelとは何かを理解する
1. Modelの使い方を覚える

### 対象者
– Rubyの以下の基礎知識を把握している
– 文字列の結合や数値の計算
– 変数
– メソッドと引数([参考](https://www.javadrive.jp/ruby/method/index3.html))

### 目次

– テーブルの意味を理解する
– RailsとDB
– DBのデータの形式
– migrationファイル/schemaファイルとrails db:~コマンドの役割を覚える
– migrationファイル/schemaファイルとは何か
– テーブルの定義

元記事を表示

rswagを使ったテストファーストなAPI開発のフローを確認する

# 今回のゴール

チーム開発に必要な API 仕様をコードと乖離せずメンテナンスしていくフローの検討です。

rails で API を作る場合、controller にメソッドを定義してルーティング設定するだけで簡単にできますが、
チーム開発等ではフロントエンジニアにソースを確認してもらうのは現実的ではないため、その API の仕様をドキュメントで共有するかと思います。
方法としては swagger.yaml を書いて swagger ui で確認するというのがあります。
ただし swagger の書き方は若干慣れが必要ですし、API が修正されると実態とずれてしまうリスクがあります。
そこで rswag という rails で spec をかけばそれをもとに swagger.yaml を生成してくれる gem を使えば問題が解決するのではと考えました。
ここではその手順を記録していきます。

# rspec とは

rails用のテストライブラリです。
letを使って差分のみのテストパターンを簡単に作成できます。

# rswag とは

rspec を拡張して、swagger.

元記事を表示

コードの見方・関わり方が少し変わった一年でした、という話

グロービスにバックエンドエンジニアとして参画している @ymstshinichiro です。
僕は今年の5月から本格的に[GLOPLA LMS](https://glopla.globis.co.jp/)の開発にジョインしました。
本記事では、そこから今日までの7ヶ月を通して自分に起こった変化について書いてみたいと思います。

## 参画以前は
僕は約10年飲食の業界にいましたが、約4年前にキャリアチェンジで SIer > Web業界(社員) > Web業界(フリーランス) という流れで現在に至っており、新卒できちんと先輩から教わったとか、スクールで先生についてもらったみたいなことがありませんでした。

なので、基本的に独学でプログラミングを学び現場のコードを見ながら/直しながら覚えていくという感じでやってきており、

– 「こうあるべき」みたいなのは書籍を読んで得たものが基本
– とはいえ現場では現場のルールや状況がある
– 結果、その時々で対応していくので、背骨のある設計/実装、綺麗で汎用性の高いコード みたいなのがあまり身についてこなかった

という実感がありました。
一方で、急

元記事を表示

【再現性皆無】docker開発環境上での、ブラウザテストの設定

“`
bundle exec rails generate rspec:install
bin/rails g factory_bot:model mandalart
bin/rails g rspec:system mandalart
bin/rails g rspec:model mandalart
“`

いままでこれらのコマンドを入力してきました。

“`rb:spec/rails_helper.rb

+ require ‘capybara/rspec’
“`

“`rb:spec/rails_helper.rb

require ‘capybara/rspec’
“`

“`rb:spec/support/capybara.rb

equire ‘selenium-webdriver’
require ‘capybara/rspec’

Capybara.configure do |config|
config.default_driver = :chrome
config.javascript_driver = :chrome
config

元記事を表示

【Rails】ルーティングまとめ

###背景
学び始めでのルーティングをする際、getを使わなきゃだとか、resource、ヘルパーメソッドって何だったか…?となり毎回検索しては忘れてしまうのでここにまとめを。

###ルーティングのやり方
**◆個別設定**
1行ずつ設定する方法。1行1行手入力しないといけないので少し面倒。
一括設定する方法もある。

“`
get ‘URLに追加’ to: ‘コントローラのアクション’

例: get ‘index’ to: ‘posts#index’
これをURLにすると→ http://localhost:3000/index

“`

**◆一括設定**
resourcesを使う。
これらのメソッドは、railsで定義されている7つのアクションを自動で生成してれる。
 ▼7つのアクションとは

| アクション名 | 役割 |
|:-:|:-:|
| index | リソースの一覧を表示させる|
| show| リソースの詳細を表示させる|
| new| 投稿フォームを表示させる|
| create| リソースを追加させる|
| edit|

元記事を表示

マンダラートを作りたい #1

https://navi.dropbox.jp/mandal-art

![マンダラート](https://2fnflu14pimi44odtt128jit-wpengine.netdna-ssl.com/wp-content/uploads/2017/01/mandal-art-06.jpg)

マンダラートとはアイデア出しの手法の一つ。
こんな漢字で、連想してアイデアを出してく。

最初から、こんな漢字のマス目を用意して、投稿表示するのが意外と難しい。

投稿ページ、投稿一覧表示ページ、投稿編集ページを合体させたいのだが、それが意外と難しい。(大事なことなので2回言った)

“`ruby
class MandalartsController < ApplicationController def index @mandalarts = Mandalart.all new end def new @mandalart = Mandalart.new end def create @mandalart = Manda

元記事を表示

【Rails】gmailを使ってメールを送信しようとすると、Net::SMTPAuthenticationError (535-5.7.8 Username and Password not accepted.とかいう地獄の対処法【Mailer】

症状

RailsのMailerを使い、gmailを通してメール送信設定をしようとしたところ、以下のエラーが表示されました。
翻訳すると「ユーザー名とパスワードは受け入れられません」でした

“`terminal
[ActiveJob] [ActionMailer::MailDeliveryJob] [af6c5cd6-78e7-40b7-a56f-8e982a58fa84] Error performing ActionMailer::MailDeliveryJob (Job ID: af6c5cd6-78e7-40b7-a56f-8e982a58fa84) from Async(mailers) in 1184.31ms: Net::SMTPAuthenticationError (535-5.7.8 Username and Password not accepted. Learn more at
):
C:/Ruby30-x64/lib/ruby/3.0.0/net/smtp.rb:1015:in `check_auth_response’
C:/Ruby30

元記事を表示

【Rails】redirect_toとrenderの処理の違いについて【初学者の疑問点を簡潔に解説】

## はじめに
 本記事は、プログラミングの学習を始めて1ヶ月の初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## 今回の疑問点
 今回の疑問点は、

  _`redirect_to`と`render`の処理の違い_
 
 です。 

 以前、バリデーションの設定を行った際に上記について疑問を抱きました。
 また、処理の違いをしっかりと理解しておかないとエラーの発生につながるので今回まとめていきます。

## 疑問点についての解説

###結論
結論から記載しますと`redirect_to`と`render`の処理はそれぞれ以下のようになります。

####redirect_toの処理の流れ

`①controller(redirect_to) → ②HTTPリクエスト → ③ルーティング → ④controller → ⑤view`

①controllerの処理で`redirect_t

元記事を表示

rails グループ機能を多対多で実装

テックアカデミーの卒業課題でオリジナルアプリを製作中
実装済みもアプリの主な機能は下記の通り
・ユーザ登録機能
・ログイン機能
・ユーザプロフィール
・投稿機能
・フォロー、フォロワー
・投稿のお気に入り
・グループ機能

【グループ機能に取り入れたい機能】
・グループの作成、編集、消去
→グループ名
・グループへの参加
・参加グループでのチャット機能 (未実装)

【グループ機能の実装手順】
1 ER図の作成
![スクリーンショット 2021-12-03 16.46.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2321592/c80e467b-74cd-6be8-05ce-64f9c22aae58.png)
2 グループの作成「ユーザ(users)とグループ(groups)を1対多で作成」
→投稿機能を参考に作成
3 グループへの参加「ユーザ(users)とグループ(groups)を多対多で作成」
→中間テーブルとして「group_users」を作成
・joinings(ユーザが参加しているグ

元記事を表示

Railsで日時を取得したいのに、2000年1月1日ばかり保存されてしまう件について

#はじめに
現在、Ruby on Railsにて睡眠を記録するアプリを作成しています。form_withを使用して日時を記録する際に、登録したデータの日付が2000年1月1日としか保存されませんでした。非常に単純な原因でしたので、備忘録として投稿します。

## 開発環境

DBにはMySQLを使用しています。

* Mac OS Big Sur 11.6
* VSCode
* Ruby 3.0.2p107
* Rails 6.1.4.1
* MySQL 8.0.27 for macos11.6 on arm64 (Homebrew)

#原因

* **migrationファイルでDateTime型とすべきところをTime型にしていた。**
* MySQLについて調べるべきなのに、Rubyのことを調べていた。

## 背後要因

> 日付だけでなく時刻も扱える Date のサブクラスです。
> DateTime は deprecated とされているため、 Timeを使うことを推奨します。
> [Ruby 3.0.0 リファレンスマニュアル class DateTime(要約)](h

元記事を表示

【技育展2021】本当に”はじめてのアプトプット”をしたら意外にも優秀賞をもらえた

# 技育展とは?

株式会社サポーターズが開催する、学生エンジニアのアウトプットを展示するイベントです。
アウトプット作品を作る+それをプレゼンすることがイベントの主な内容です。
私は2021年開催の回に参加しました。
チームは高校時代の同級生の友人と2人でした。

https://talent.supporterz.jp/geekten/2021/

# 何を作ったの?

**失敗ドットコム**というWebサイトを作成したました。
このサイトは、みんなの失敗談を知識として集積して、他の人の挑戦に役立てようというコンセプトから生まれました。
主な機能は、自分の失敗談を投稿したり、他人の失敗談を閲覧することです。

https://www.shippai-for-everyone.com/

例えば、こんな投稿があったりします。

https://www.shippai-for-everyone.com/posts/24

# 審査結果は?

以下のようなルールで入賞者が選出されます。

>最優秀賞(1作品) 30万円/テーマ
>優秀賞(1作品) 10万円/テーマ
>「はじめてのアウトプ

元記事を表示

【Ruby】trimしたいときはstripしよう

##strip
Rubyには“`trim“`メソッドがないので代わりに“`strip“`メソッドを使う。

**文字列先頭**と**末尾の空白文字**を全て取り除いた文字列を生成して返す。
空白文字の定義は“`” \t\r\n\f\v”“`
文字列右側からは“`”\0″“`も取り除くが、左側の“`”\0″“`は取り除かない。

“`ruby
pry(main)> p ” s”.strip
=> “s”
# 文字と文字の間の空文字は取り除かない
pry(main)> p ” s f “.strip
=> “s f”
pry(main)> p ” s f\n”.strip
=> “s f”
pry(main)> p “\0 s f\0”.strip
=> “\u0000 s f”
“`

##参考

https://docs.ruby-lang.org/ja/latest/method/String/i/strip.html

元記事を表示

【ruby on rails】 gem impressionistで追加したPV数カウント機能が動作しない場合がある

# 0.概要

文章を投稿できるアプリをruby on rails で作り
投稿の詳細画面でpv数をカウントする機能を導入済み

しかし、一部の詳細画面ではPV数が追加されない

# 1. 前提(カウント機能追加までに実施したこと)

Gemfileに以下を導入しbundle install

“`
gem ‘impressionist’, ‘~>1.6.1’
“`
さらにターミナルで以下実施

“`
rails g impressionist
“`

以下が作成される

“`db/migrate/〇〇〇〇〇〇〇〇〇〇〇〇〇_create_impressions_table.rb
class CreateImpressionsTable < ActiveRecord::Migration[5.2] def self.up create_table :impressions, :force => true do |t|
t.string :impressionable_type
t.integer :impressionable_id

元記事を表示

戻るボタンを実装したらdropdownが動かなくなった

##概要
戻るボタンを実装しようと思い、

“`
<%= link_to :back do %>

<% end %>
“`
と書いてみた。

すると、この戻るボタンからページを変遷させると、ヘッダーにあるdropdownが動かなくなってしまった。

##調査
調べてみると、このコードは自動的にjsを呼び出しているらしい。
turbolinksを無効にすれば実装できるかもしれない

ということで

##解決方法

“`

<%= link_to :back do %>

<% end %>

“`

“`

“`
で囲んであげると

元記事を表示

【Rails】本番環境でimages配下の画像が表示されない場合の対処法【Heroku】

# やりたいこと

Herokuの本番環境で`assets/images`下の画像を表示させたい。

# エラー内容

開発環境では表示されるが、本番環境では画像が表示されない。

# 原因

通常本番環境ではアセットパイプラインを通る処理が自動実行されない。

# 解決策

本番環境上でアセットパイプラインを通るように**プリコンパイル処理を実行**する

`rake assets:precompile RAILS_ENV=production`

or

本番環境上でアセットパイプラインを自動で通るように**設定を変更**する

config/production.rbファイルの`config.assets.compile = false`をtrueにする。

trueだとprecompileしていないファイルを動的にコンパイルするようになる。

# 参考

[Rails初学者がつまずきやすい「アセットパイプライン」](https://www.transnet.ne.jp/2016/02/28/rails%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%8C%E3

元記事を表示

【Rails】フォロー/フォロワー機能のアソシエーションについて【初学者の疑問点を詳しめに解説】

## はじめに
 本記事は、Railsの学習を始めて1ヶ月の初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## 今回の疑問点
 今回の疑問点は、

  _フォロー/フォロワー機能のアソシエーションについて_
 
 です。 

 現在、Twitterクローンを作成しており、フォロー/フォロワー機能の実装の際に上記について疑問を抱きました。

## 疑問点についての解説
###いいね機能実装時との比較
おそらく、多くの方がフォロー/フォロワー機能実装の前にいいね機能の実装に取り組んでいることと思いますので、いいね機能と比較して確認していきます。
#### いいね機能のアソシエーションの記述
##### Favoriteモデルの記述

“`ruby:app/models/favorite.rb
class Favorite < ApplicationRecord belongs_to

元記事を表示

【LINE×Rails】Rails初学者も作れるLINE Botアプリケーション

# 概要
この記事では、先日リリースした[ReLINE【”猫さん”】](https://www.cat-reline.com/)で得た LINE Messaging API の知見を使って、`投稿に応じて返信するテキストを変化させるLINE Botアプリケーション`を作成します。

記事の内容に沿って実際に手を動かして取り組んでもらうと、今回私が作成したものと同じものができるので、お時間のある方はチャレンジしてもらえると嬉しいです!

【注意点】
この記事では上記のLINE Botアプリケーションを作成する流れを記載していきます。そのため技術的な話はほとんど出てきませんが、身近なLINEアプリを使ってプログラミングへの楽しさや作成する面白さなどを感じてもらえたら幸いです。

【今回挑戦する4ケース】
1.”おまじない”(`アブラカタブラ`、`チチンプイプイ`、`ヒラケゴマ` のいずれかテキスト)が投稿された場合
   => `It is Omajinai`と返す
2.`ruby`というテキストが投稿された場合
   => `Is it Programming language? O

元記事を表示

Git環境で独自のコマンドを登録する【zsh, bash】

## はじめに
Railsで開発するならbundle e rails (省略)とかめちゃくちゃ使用します。
私はgit pull origin feature/add-watch-modelとか当たりまえのようにタイピングしてました。

そして今更ですがaliasで独自コマンドを設定したので1人でも誰かの役にたてば良いな
と思って記事にしました。

## 参考記事
https://etalocohcetihw.com/blog/git_optimization/

https://qiita.com/reireias/items/d906ab086c3bc4c22147

## 環境
– shell: zsh

## 独自コマンド登録方法
とりあえず下記で登録できます。

“`terminal
alias g=’git’
“`
でもターミナルを閉じたり分割すると使用できなくなります
なのでシェルの設定ファイルに書き込みます

## シェルの設定ファイルへ書き込む
だいたいの人はbashかzshを使用していると思いますので下記のコマンドで設定ファイルを開きます

“`termin

元記事を表示

【Rails】目的地の日没時刻がわかるだけのシンプルなアプリを作った

##はじめに
タイトル通り、目的地の日没時刻がわかるだけのシンプルなアプリを作りました。
[シンプルマジックアワー](“https://simple-magichour.com/”)というアプリです。
開発の過程などを記していきます。

##アプリの説明
日付と都市を選択すると日没の時刻を表示します。
それだけだとあまりに味気なかったので、マジックアワーの時刻も付け足しました。
![スクリーンショット 2021-12-02 13.49.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1535961/1a05c464-4f75-cfa3-5ec6-d5df906cea44.png)

####なぜ作ろうと思ったか
一眼レフカメラで夕焼けの写真を撮るのが趣味なのですが、綺麗な夕焼けを撮るには日没の時間を知っておく必要があります。
日没の時間が分かるアプリはごまんとあるのですが、その多くは日没時刻以外の情報もたくさん表示されます。(日の出の時刻や太陽の位置など)
また、地点についても詳細な位置を取得するた

元記事を表示

Ruby biz Grand prix 2021のファイナリストに選ばれた

[Catallaxy Advent Calendar](https://qiita.com/advent-calendar/2021/catallaxy) 1日目を担当します、エンジニア1号です。

[Ruby biz Grand prix 2021(Ruby bizグランプリ2021)](https://rubybiz.jp/)へエントリーして、ファイナリストに選ばれましたので、今日はそのことに触れてみたいと思います。

## Catallaxyとは
金属加工プラットフォームを提供する2015年創業スタートアップになります。2018年に現在の業態にピボットしたのち、2021年3月にはシリーズAとして約4.1億円を調達しており、現在までに累計約8億円の資金調達をしております。従業員数26名のうち、エンジニア10名、デザイナー1名、エンジニアの業務委託・インターン数名のメンバー構成になっており(2021年9月応募時点)、約半数がプロダクトに関わる業務に携わっています。

## Ruby biz Grand prix
2015年からRuby bizグランプリ実行委員会が開催するRubyを活

元記事を表示

OTHERカテゴリの最新記事