Ruby関連のことを調べてみた2021年09月06日

Ruby関連のことを調べてみた2021年09月06日

Railsの仕組みについて

#1.はじめに
プログラミングスクールでRuby on Railsの勉強を始めるにあたって、
Railsの仕組みを調査する機会があったのでまとめました。

#2.Railsとは
Rubyプログラミング言語で書かれたフレームワーク。

###Railsの2つの基本理念

* 同じことを繰り返すな(Don’t Repeat Yourself: DRY) → コードの繰り返しを避ける
* 保守性と拡張性を確保し、バグが減少する。
* 設定より規約(Convention over Configuration: CoC) → 各種設定に対してデフォルト値を予め設定
* 設定ファイルの設定作業を行う負担が減少。

#3.MVCとは
RailsはMVCと呼ばれる3機能からなるソフトウェアアーキテクチャに基づいて構成されている。

* Model(モデル) 
* データの処理を行う機能。
* データベースの入出力や、計算を行う。

* View(ビュー)
* ブラウザへの表示に関する機能。
* HTMLによるインターフェースの表示を行う。

元記事を表示

【Mac】Docker+rails6+MySQLで環境構築中にaddress already in useと出たら?

環境

・macOS Big Sur バーション11.5.2
・シェル zsh
・Ruby 3.0.2
・rails 6.1.4
・My SQL 8.0.23
・Docker 20.10.8

Docker file

“`rails:Dockerfile
FROM ruby:3.0.2
RUN apt-get update -qq && apt-get install -y nodejs

# yarnパッケージ管理ツールをインストール
# https://classic.yarnpkg.com/en/docs/install/#debian-stable
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add –
RUN echo “deb https://dl.yarnpkg.com/debian/ stable main” | tee /etc/apt/sources.list.d/yarn.list
RUN apt-get update && apt-get install yarn

元記事を表示

Ratyを使ったレビュー機能 バリデーションエラーの表示方法

#実装内容
**Bootstrap4**では、サーバーサイドでチェックした入力エラーのメッセージを表示するための`「invalid-feedback」`**クラス**が用意されており、項目ごとに分かりやすく表示されるようになっています。

しかし、入力欄に`タグ`を使用していない場合、このエラーメッセージは表示されません、、(自分の場合、**Raty**を使った`レビュー機能`で起こりました、、)

この問題に遭遇し参考記事を探してみたのですが、該当する記事を見つけることができなかったこともあり、備忘録も兼ねて紹介しています。

#処理全体の流れ

1. 三項演算子を使用して適切なクラスの付与
1. styleの修正
1. エラーメッセージ表示用のdivタグ作成

#完成形はこちら
###Before
[![Image from Gyazo](https://i.gyazo.com/fc83740cabb77c8dae1794b2091d04f8.png)](https://gyazo.com/fc83740cabb77c8dae1794b2091d04f8)
###Af

元記事を表示

フォーム入力欄に最初から数字が入ってしまう現象をvalue: “” で対処した。

# なぜかフォーム入力欄に最初から数字の 0 が入ってしまう現象が発生してしまった。

“`ruby

商品名
必須

<%= f.text_area :item_name, class:"items-text", id:"item-name", placeholder:"商品名(必須 40文字まで)", maxlength:"40" %>
“`
原因はわかりませんが、ページを開くと入力欄に数字の0が既に入ってしまい対処に困りました。

“`ruby

商品名
必須

<%= f.text_area :item_name, class:"items-text", id:"item-nam

元記事を表示

RailsマンにとってPandasのDataFrame型がモヤモヤする理由

## PandasのDataFrame型はモヤモヤする
当方、元々Rails歴3年で、最近Kaggleを始めた超初心者なのですが、Railsの経験が活かされる場面もあれば、逆にRailsの経験がバイアスになり混乱する場面もあります。入門してまず躓いたのは、PandasのDataFrame型です。特に`df[‘name’]`や`df.iloc[0]`とやらで混乱してしまいました。

## RailsとPandas テーブルデータの操作の違い
例えば、次のようなテーブルデータからオブジェクトを作成し、1行目・1列目を取り出す場合のコードの違いを比較します。

| id | name |
| — | — |
| 1 | 田中太郎 |
| 2 | 佐藤花子 |
| 3 | 山田一郎 |

### PandasのDataFrame型
“`python
data = {
‘id’: [1, 2, 3],
‘name’: [‘田中太郎’, ‘佐藤花子’, ‘山田一郎’]
}
users = pd.DataFrame(data)

# 1行目を取り出したいとき
users.i

元記事を表示

【Ruby on Rails】redcarpetを使ったMarkdown記法の拡張機能のまとめ

#対象者

* マークダウンを実装予定の方
* gem redcarpetを使う予定の方

#目的

* redcarpetの拡張機能を一つひとつ理解しながら使用する

#実際の手順と実例
###1.gemの導入
Gemfile

““
:
gem redcarpet
:
““

**bundle install**を実行

###2.拡張機能一覧

| | 機能 | 説明 |
|:-:|:-:|:-:|
| 1 | :no_intra_emphasis | 単語の強調。**や–で囲う|
| 2 | :fenced_code_blocks | フェンスで囲まれたコードブロックを解析します。3つ以上の~バックティックで区切られたブロックは、インデントする必要なしにコードと見なされます。オプションの言語名は、コードブロックの開始フェンスの最後に追加できます。 |
| 3 | :autolink | リンクを解析します。http、https、およびftpプロトコルの自動リンクは自動的に検出されます |
| 4 | :disable_indented_cod

元記事を表示

【初心者向け】Railsチュートリアル 第8章 ログイン機構をまとめてみた

# この記事に書かれていること
Railsチュートリアル第8章のまとめです。
自分自身、第8章に取り組んでとりあえずログイン機能は実装できたものの、
何がどうなっているかいまいちよく分からなかったため、振り返りとして書いています。

これから取り組まれる方・私と同じようにあまり理解ができなかったという方に助けになるといいなと思っています。

※お断り
あくまで全体像を把握することに主眼を置いており、
セッションやsession、paramsなど、理解が難しい点については簡単な説明にとどめています。

# この記事の対象となる読者
– これからRailsチュートリアル第8章に取り組むにあたり、先に全体像を把握しておきたい
– Railsチュートリアル第8章を終えたが、いまいち理解できない
– ログインの仕組みだけサクッとコピペしたい

## 完成状態のコード
まずはこの記事で解説するコードを掲載しておきます。
[GitHub](https://github.com/yasslab/sample_apps/tree/master/6_0_0/ch08)にも同様のものが上がっているので、

元記事を表示

OmniAuthとDevise連携での未定義メソッドエラー(メモ)

###開発環境

Ruby 2.7.4
Rails 6.1.4.1
PostgreSQL 13.4

###エラー内容
OmniAuthとDeviseを連携し起動の際に`omniauth_authorize_path’が未定義メソッドとされる

![スクリーンショット 2021-09-05 23.30.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1241122/7fb210b9-1ed6-a442-aeee-07053f64cd50.png)

###参考
[OmniAuth + Devise 連携で ActionView::Template::Error (undefined method `omniauth_authorize_path’ for x]
(https://blog.neoflow.jp/ruby/ruby-on-rails5/4198/)

###原因
OmniAuthのメソッド変更にDeviseのテンプレートが追い付いていない
以前は`omniauth_authoriz

元記事を表示

Heroku ステージング環境から本番環境にプロモートできない

# 内容
アプリをherokuのステージング環境にデプロイしており、動作確認が完了したので本番環境にプロモートしようとしたところ

“`
Fetching app info…
Fetching apps from app-name-pipeline…
Starting promotion to production…
Waiting for promotion to complete…
Fetching release info…
Running release command…
rails aborted!
PG::ConnectionBad: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket “/var/run/postgresql/.s.PGSQL.5432”?

Tasks: TOP => db:migrat

元記事を表示

【Docker】rails db:migrateできないエラー(メモ)

##開発環境

Ruby 2.7.4
Rails 6.1.4.1
PostgreSQL 13.4

##記事内容
Docker上でrails6の環境構築後、`rails db:migrate`を行なったときにいくつかエラーが発生したので記録する。
エラーで指摘された部分は`/config/database.yml`(以下)である

“`rb
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
host: db
username: root
password: password

development:
<<: *default database: docker_practice_development ``` --- ###①ホスト名"db"をアドレスに変換できない ####エラー内容 ```console rails aborte ActiveRecord::Connection

元記事を表示

rubyの静的型検査(steep)をvimから動かす

![スクリーンショット_090521_094242_PM.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17353/021f137a-e5d2-3d04-9ad5-f159c62a8985.jpeg)

# まずは行うべき設定から

## .vimrc

実際に動作を確認したときの.vimrc全部です。普段使っているものは一旦外しました。

最初の5行はvundleのための記述なので、使っているパッケージマネージャにあわせて適宜やる感じになると思います。

“`vimscript
set nocompatible ” be iMproved
filetype off ” required!

set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

Bundle ‘gmarik/vundle’
Bundle ‘prabirshrestha/vim-lsp’
Bundle ‘mattn/vim-lsp

元記事を表示

Railsのconnection poolについて理解する

## 本記事の目的と結論
railsのconnection pool管理について、
1. 何個まで接続を保持できるのか __→ デフォルト5個、database.yamlから設定値を取得__
2. 別DBへの繋ぎ直し時のconnection poolの管理 __→ pool_managerを用いて、DB毎にhashで管理している__

version
rails: 6.1.4
ruby: 3.0.2

## 背景
複数DBを用いたアーキテクチャをrailsで実装する。
DB間の接続切り替えを行った際のconnection poolの管理を調査し、オーバーヘッドがどの程度発生するのか確認したい

## connection poolとは
DBの接続状態を確立したコネクションを保持しておき、再利用することでDB接続時間を短縮するもの

## 1. 何個まで接続を保持できるのか
[公式ドキュメント](https://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/ConnectionPool.html)によると、
>

元記事を表示

Webアプリケーションにおける通信の仕組み(1)

# はじめに
 Webアプリを初めて作成したので、そのまとめとしてWebアプリケーションでどのように通信が行われているのかをアウトプットしようと思い、この記事を投稿しました。

 今回のテーマとしては、Webアプリケーションにおけるクライアントとサーバ間の通信がどのように行われているかをアウトプットしていきたいと思います。間違っている事があるかもしれないので、その場合は指摘していただいて大丈夫です。

# Webアプリケーションってなんだ?
 そもそもWebアプリケーションとは、利用者(ユーザー)がインターネットを通して、ブラウザ(Webサーバーに接続するためのソフトウェア)で操作をするアプリケーションのことです。クライアント側ではアプリケーションのインストールをする事なく利用できたり、処理がサーバ側で行われるので、クライアント側は何もしなくても新しいサービスを受ける事ができるのが利点です。例えば、YoutubeやGmail、クックパッドなどが挙げられます。皆さんも一度は使った事があるのではないでしょうか。以下の図は、大まかにWebアプリケーションの通信をまとめたものです。

![スク

元記事を表示

[Ruby] AtCoder過去問 A – Cookie Exchanges

##はじめに
AtCoder過去問でA問題ですが、小さな見落としでかなり悩みました。
私がつまづいたところも含めて解説していきたいと思います。
よろしくお願いします。

問題はこちらから確認してください↓

https://atcoder.jp/contests/agc014/tasks/agc014_a

## A – Cookie Exchanges
今回はA問題ということで比較的初学者でも時間をかければそれなりに答えを出せるのではないのでしょうか。

こちら私がはじめに組んだプログラムです。
(このコードは間違っています。どこが間違っているか探して見てください)↓

“`ruby
a, b, c = gets.split.map(&:to_i)

count = 0

if a == b && b == c
puts -1
else
while a.even? && b.even? && c.even?
a_half = a/2
b_half = b/2
c_half = c/2
a = b_half + c_half
b =

元記事を表示

【Mac】rbenv versionsとruby -vでバージョンが違う時の解決法

ruby versionsの時

“`
$ ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-darwin20]
“`

ruby -vの時

“`
$ ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin20]
“`

Rubyのバージョンが違うことがわかります。
この問題解決に2時間くらいかかったので投稿しようと思います。

解決策

“`
$ echo ‘eval “$(rbenv init -)”‘ >> ~/.bash_profile
$ source ~/.bash_profile
$ rbenv global 3.0.2
“`

結論この3行を上から順番にターミナルに打つと問題解決できました。
めでたしめでたし

元記事を表示

Express React Ruby Go

Express React Ruby Go

Node.js

“`
su –
yum install -y https://rpm.nodesource.com/pub_12.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm
yum install -y nodejs
node -v
“`

元記事を表示

Mac で Ruby の環境が壊れてた

## 環境
* macOS Big Sur 11.4
* MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)

“`
$ ruby –version
ruby 2.6.4p104 (2019-08-28 revision 67798) [x86_64-darwin18]
$ rbenv –version
rbenv 1.1.2
“`

## 現象
React Native でモバイル開発をしていました.

iOS 向けのビルドをするためには, `ios` ディレクトリ内で `pod install` する必要があります.しかし,実行すると

“`
$ pod install
zsh: /usr/local/bin/pod: bad interpreter: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby: no such file or d
irectory
“`

といったエラーを吐かれます. `/usr/local/bin/po

元記事を表示

deviseでのストロングパラメータの設定について

そもそもdeviceに誤記しやすい名前ひどいと思う。

#0. なんでこの記事を書いたか
そもそもストロングパラメータがややこしくてよくわからないのに、deviseを用いると余計にややこしくなるので、頭の中の整理のために書きました。

#1. 設定の方法について
deviseを使わないリクエストの場合では、ストロングパラメータはコントローラに記述していた。したがってdeviseを用いる場合でもコントローラに記述すればいいやと思いきや、deviseの処理を行うコントローラはGem内に記載されているので編集不可能。

じゃあどうするべきかとなったら、全てのコントローラーが継承している`application_controller.rb`に記載をすることになる。

#2. deviseにおけるストロングパラメータ
基本的に通常のストロングパラメータと同じでparamsに対してpermitを指定していく流れになる。が、deviseでのparamsは`devise_parameter_sanitizer`というものが該当する。これを用いてメソッドとして定義すると下記のようになる。

“`ru

元記事を表示

url_forでオブジェクトからリンクを作る時に、subdomainも渡す【Rails】

詰まったのでメモ。

## 内容

オブジェクトからリンクを作るときに、subdomainを渡したい。

## 解決策
url_forではできない。polymorphic_urlを使う。

“`.rb
url_for(@user)
“`
url_for は引数を1つしか取らない(バージョンによるかも)
だからoptionを使いたければ、polymorphic_urlを使う。

“`.rb
polymorphic_url(@user, :subdomain => “sub”)
“`

これでsubdomainが渡せる。

## 参考

https://stackoverflow.com/questions/3489838/full-url-with-url-for-in-rails

元記事を表示

Rubyのバージョン指定

メモ書きです。
rubyのバージョン指定が以下でできるのでメモ。

“`ruby
$ echo ‘2.7.2’ > .ruby-version
“`

元記事を表示

OTHERカテゴリの最新記事