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

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

ただMacのターミナルでRubyとRailsを最新バージョンにしたかっただけなのに。。

## はじめに
久々に簡単なアプリを作成しようとして、(作成前ついでにRubyをRailsのバージョンを最新にしておくか)と軽い気持ちでバージョンアップを試みたら思いのほか詰まったので備忘録として残しておこうと思います。

バージョンアップの流れとしては
**1.Homebrewとrbenvのアップデート**
**2.Rubyのアップデート**
**3.Railsのアップデート**
という感じです。早速やっていきましょう。

## 1.Homebrewとrbenvのアップデート
アップデートするコマンドの流れはこちら
“`
$ brew update # Homebrewをアップデートする
$ brew upgrade rbenv && brew upgrade ruby-build
“`
まずターミナルにて“brew update“を実行します。すると早速エラーが
![スクリーンショット 2022-09-17 11.18.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1089852/

元記事を表示

【Ruby】Rubyのわかりにくい文法

### ハッシュの記法の色々

“`Railsコンソール
# ハッシュのキーを文字列で
>> user = { “name” => “tarou”, “email” => “tarou@example.com” }
=> {“name”=>”tarou”, “email”=>”tarou@example.com”}

# ハッシュのキーをシンボルで
>> user = { :name => “test”, :email => “test@example.com” }
=> {:name=>”test”, :email=>”test@example.com”}

>> user[:name] # :nameキーにアクセス
=> “test”

>> user[:test] # 存在しないキーに対応する値にアクセスするとnil
=> nil
“`

そして、Rubyでおそらく一番よく目にする、
この記法に至る

“`
>> user = { name: “test”, email: “test@example.com” }
=> {:nam

元記事を表示

DockerでつくるRails6 + Vue3 + PostgreSQLの開発環境

# はじめに
ここまで以下の記事のとおり、**Rails6 + PostgreSQL**、**Vue3**の開発環境をDockerでそれぞれ構築してきました。

https://qiita.com/subun33/items/822c236e97e8ee85f664

https://qiita.com/subun33/items/b051f5697482203aa31d

今回は、それぞれ構築したこの開発環境をDocker Composeを使って、まとめて管理できるようにしていきたいと思います。

# 目次
[1. ディレクトリの構成](#1-ディレクトリの構成)
[2. 完成したファイル](#2-完成したファイル)
[3. front/Dockerfileの修正](#3-frontdockerfileの修正)
[4. dockercompose.ymlの修正](#4-dockercomposeymlの修正)
[5. 動作確認](#5-動作確認)
[6. さいごに](#6-さいごに)

# 1. ディレクトリの構成
準備したファイルは以下のとおり、各ディレクトリに配置しています。
`

元記事を表示

git push heroku masterで失敗後heroku loginでも失敗した場合

# エラー内容
Railsチュートリアル第9章の最後でgitにpush後、herokuにデプロイしようとしたら以下のようなエラーが発生。
“`
$ git push heroku master
Username for ‘https://git.heroku.com’: ~~~
Password for ‘https://~~~@git.heroku.com’:
remote: ! WARNING:
remote: ! Do not authenticate with username and password using git.
remote: ! Run `heroku login` to update your credentials, then retry the git command.
remote: ! See documentation for details: https://devcenter.heroku.com/articles/git#http-git-authentication
fatal: Authe

元記事を表示

【Ruby on Rails】 Rubocopについて

# Rubocopのインストール

https://github.com/rubocop/rubocop

“`Gemfile
group :development, :test do
gem ‘rubocop’, require: false
gem ‘rubocop-performance’, require: false
gem ‘rubocop-rails’, require: false
gem ‘rubocop-rspec’
end
“`

“`
bundle
“`

“`
touch .rubocop.yml
“`

## 設定例
“`.rubocop.yml
require:
– rubocop
– rubocop-performance
– rubocop-rails
– rubocop-rspec

AllCops:
NewCops: enable
DisabledByDefault: true
Exclude:
– Gemfile
– db/fixtures/**/*
– db/sc

元記事を表示

【Ruby on Rails】Rspec, Factorybot等の導入

# Rspecのinstall

基本的には、document通りやる。
https://github.com/rspec/rspec-rails

“`Gemfile
group :development, :test do
gem ‘rspec-rails’, ‘~> 6.0.0’
end
“`

“`
bundle
“`

“`
rails generate rspec:install
“`

# Factorybotのinstall

“`Gemfile
group :development, :test do
gem ‘factory_bot_rails’
end
“`

“`rails_helper.rb
Rspec.configure do |config|

config.include FactoryBot::Syntax::Methods
end
“`
これで、createでfactorybotが呼ばれる

factoryを作成するのは、

“`
rails g factory_bot:model user
“`

元記事を表示

【Ruby on Rails】rails newコマンドについて

# PostgreSQLでrails newしたい場合

“`
rails new -d postgresql
“`

# Dockerでrails newする場合

まずはDockerfileを作成。

“`Dockerfile
FROM ruby:2.7
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs npm postgresql-client
RUN npm install –global yarn
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT [“entrypoint.sh”]
EXPO

元記事を表示

Ruby on Rails をTermuxに導入

# やりたいこと
– termuxにRuby on Railsを導入したい
– ググるといくつか参考になる情報あるが、どれを試しても導入できない

# 環境
– Android 12
– 最小限でMySQLを使用したRailsアプリを作成します

# 構築手順
古いスマホにTermuxを入れてそこにRuby on Railsを導入する。

## Termuxをインストール
※以下ページご参照ください。(「Termuxのインストール」まで)
https://qiita.com/tatuya911/items/840107699190451a4651

:::note info
GooglePlay以外からアプリのインストールする場合は
「不明なアプリのインストールを許可」をしてください。
※自己責任でのインストールになります。
:::

## お決まりのコマンドを実行
`apt upgrade`途中に出てくる選択肢は Enter(N) でOK。
“`shell:Termux
~ $ apt update
~ $ apt upgrade
“`

## 必要パッケージをインストール

元記事を表示

Rails6 Bootstrap5を導入する

こんばんは。
Railsの案件にアサインされることになリました新米です。
環境構築でつまづきたくないので、備忘録として書き残しておきます。

### 必要な対応
#### CSS
bootstrap popperのパッケージインストール
“`
yarn add bootstrap @popperjs/core
“`
package.json に設定が追加されます。
“`
“dependencies”: {
# 一部抜粋
“bootstrap”: “^5.2.1”,
“popper.js”: “^1.16.1”,
},
“`

#### スタイルインポート
“`
mkdir app/javascript/stylesheets
touch app/javascript/stylesheets/application.scss
“`

作成された`application.scss`に以下を追記
“`
@import ‘~bootstrap/scss/bootstrap’;
“`

#### JavaScript
`yarn`でインストールし

元記事を表示

ブランクありのエンジニアが現場復帰して躓いたこと part.1

## これは何?
エンジニアブランク4年強(もう素人)の私が、エンジニア復帰後に、悩んだことや学んだことを定期的に記事にしていければと思い、書いているものになります。
同じような悩みに至った方や共感できる方はいいねいただけると嬉しいです!
※使用中の技術 Ruby on Rails / React(TypeScript)
※ブランクの期間は、マーケティングをしておりました。

# ~ Pager編 ~
![スクリーンショット 2022-09-17 12.28.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2322481/6f92b9c8-8db3-ac65-082d-ef29a6de7526.png)

ショッピングサイトでよく見かけるページ送りの処理を実装しようと思い、参考になりそうな他ページのプログラムを見つけにいく。(コピペ戦略です)
それっぽいの見つかりホッと一安心と思いきや

“`ruby: SnapshotsController.rb

SNAPSHOTS_COUNT_

元記事を表示

Ruby on Rails form-forの記述をform-withへ変更した時、model: @○○を記述するがこのインスタンス変数はどこからやってきたの?

# はじめに
Ruby on Railsでdeviseのgemを導入した際にはコントローラは生成されない。となった時にどこで何を見たらいいの?と思い、分からなかったので、メンターさんに質問して理解した内容をここに記録する。

(自分にしかわからない書き方となっていること、ご了承ください:bow:)

# form-forの記述をform-withへ変更した時、model: @○○を記述するがこのインスタンス変数はどこからやってきたの?

#### form-forの記述
“`
<%= <%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %> %>
“`
#### form_withの記述
“`
<%= <%= form_with model: @user, url: user_registration_path do |f| %> %>
“`

#### 疑問点。。。
`model: @user`と記述したので、インスタンス変数`@user`はどこかで定義されてる

元記事を表示

【Rails】f.text_areaのサイズ指定の仕方【Bootstrap】

# 結論

“`html

<%= f.text_area :content, class: "form-control", style: "width:40%", rows: "3" %>

“`

## 解説
+ 親要素に`form-label`のクラスを付与する。
→`form-floating`クラスだと`rows`の指定が出来ない。

+ `text_area`に`form-control`のクラスを付与する。

+ `text_area`内で`style: “width:XX%”`と`rows: “X”`を指定する。

## 注意
属性の付与は`○○:`といったシンボルの形式を指定すること。
`,class=”{任意の値}”`のような形式を追加すると下記のようなエラーメッセージとともにバグが発生する。

“`terminal
[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug

元記事を表示

ActiveRecordモデルの拡張検討

ActiveRecordモデルの拡張方法にはいくつか選択肢があるので、どういった方法を選ぶのが適切かよくよく考えなおしてみたいと思います

## 今回のストーリー
新規ユーザーは必ず無料のサンプルを受け取ることができるので、ユーザーが作成されたときに、無料サンプル用の注文を作成したい
ただし、受け取れる無料サンプルは一人一つまでで、無料サンプルを提供する販売元と無料サンプルはコードで指定したい

販売元コード: DEFAULT
商品コード: JOIN

![スクリーンショット 2022-09-17 11.01.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89997/0445fa77-d120-534f-a95b-36a9d576133a.png)

## 2種類の拡張方法を試す
1. [scopeを使った拡張を使った拡張](#1scopeを使った拡張)
2. [AssociationExtentionを使ったhas_manyリレーションの拡張](#2associationextentionを

元記事を表示

Dockerにおいてソースコードが即時反映されない問題について

# 背景
現在就職のためのポートフォリオを作成しているのですがその際、Docker環境のrailsでソースコードを書 いているときにソースコードが即時反映されなかったので、即時反映される方法を記しておきます。

# 即時反映させる方法について
自分が調べた限りでは即時反映させる方法は2つありました。

**一つ目ですが**
“`ruby:config/environments/developments.rb
config.file_watcher = ActiveSupport::EventedFileUpdateChecker
“`
これを・・・
“`ruby:config/environments/developments.rb
config.file_watcher = ActiveSupport::FileUpdateChecker
“`
とすれば大丈夫です!
# 何をしているのか?
これは
・ファイルの保存イベントを監視するのか
・ファイルを追跡して変更を監視するのか
の違いがあるらしいです!
“`ruby:config/environments/developme

元記事を表示

これでバッチリ!初心者向けdevise導入の基本

本記事では、以下について記載しています。
* deviseの導入手順
* usersテーブルの作成手順
* デフォルト以外のカラムを追加した場合に必要な処理
* deviseを導入すると使える基本のメソッド3選
* deviseの削除方法

# deviseの導入手順
1\. Gemfileの最後の行に以下を追加
“`
gem ‘devise’
“`
2\. Gemをインストール: ターミナルで以下のコマンドを実行
“`
bundle install
“`
3\. ローカルサーバーの再起動: ターミナルで以下のコマンドを実行
“`
rails s
“`
4\. deviseの設定ファイルを作成: ターミナルで以下のコマンドを実行
“`
rails g devise:install
“`
5\. deviseのビューファイルを作成: ターミナルで以下のコマンドを実行
“`
rails g devise:

元記事を表示

rails apiでの複数の値をmapで回してcreateアクションでDBへ保存しようとするとAbstractController::DoubleRenderErrorで苦しめられた話

はじめに

reactで配列を使って作成した値を、一気にrails apiに送ってcreateアクションで保存をしたいと考えていました。
ですが、AbstractController::DoubleRenderErrorを解消することに時間がかかったので、備忘録として残そうと思います。
深夜テンションで、雑に文章を書いちゃってる部分もあるかもしれないので、後で元気がある時に確認して必要があれば修正しようと思います。

どのような記述をしてエラーが起きたか

データやモデル名やカラム名は少しいじってますが、下記のような値がrails apiが来ているとします。

~~~
Parameters: {“_json”=>[
{“quiz_name”=>”問1”, “quiz_status”=>”answered”},
{“quiz_name”=>”問2”, “quiz_status”=>”answered”},
{“quiz_name”=>”問3”, “quiz_status”=>”answered”}],
“quiz”=>{}}
~~~

最初は下記のように記述をしていました。

元記事を表示

ActiveStorage に保存した画像のサイズを取得する

ActiveStorage をセットアップ後、

“`ruby
class User < ApplicationRecord has_one_attached :avatarend end ``` のように、モデルを定義して、 ```ruby user.avatar.attach(params[:avatar]) ``` のように、ファイルを添付すると、 ```ruby user.avatar.metadata[:width] user.avatar.metadata[:height] ``` で、幅と高さが取れます。 # 必要なもの - [libvips](https://github.com/libvips/libvips) - `ImageMagick` より `libvips` の方が早いそうなので - [ruby-vips](https://github.com/libvips/ruby-vips) - 画像サイズをとるだけだとこれだけで十分 - 画像のリサイズとかする場合には、[image_processing](https://

元記事を表示

RubyKaigi 2022行ってきたYO!

はいどうもー!最近バイク&カメラにドハマリしているYOです。
先日は三重県文化会館で行われたRubyKaigi 2022に参加しました!数年ぶりのリアルイベントなので、ワクワクする気持ちが押さられません!

初日の早朝に最寄り駅について、これが見えた:
![IMG_1447.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59161/f069c160-cb40-c62d-f9be-ee818c021e10.jpeg)
「津(つ)きました!」
この駅名の表示は、遠くから見るときに「?」に見えるようにわざわざ漢字表記を小さく下側に配置したという。遊びココロがあって自分は好きです。

————
駅から無料シャトルバスも出ていて本当に用意周到です!バスに乗って揺られて5分ほど、三重文化会館に到着しました。
入り口の撮影スポットもあったので、記念写真もバッチリ取りました!

![Image from iOS (17).jpg](https://qiita-image-store.s3.ap-nor

元記事を表示

【Rails】Parameter Objectパターン

## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16

## Parameter Objectパターン

Laravelだったらフロントから投げられたパラメータはRequest層でバリデーションをかけたりするが、
RailsはドキュメントにRequest層に当たるものが載っていない。
そういうときにParameter Objectパターンを使って実装するのもひとつの手法らしい。

“`app/models/parameters/profile_parameter.rb
module Parameters
class ProfileParameter
attr_reader :name,
:email,
:avatar,
:birthday,
:gender,
:phone_number,
:living_addr

元記事を表示

【Ruby】◯番目から最後までの文字列を取得する

## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16

## String[]

“`[]“`の中に“`Range“`オブジェクトを指定できる。
“`str[f..-1]“`は「f文字目から文字列の最後まで」を表す慣用句

“`ruby
message = ‘こんにちは、山田さん’

message[2 .. -1]
=> “にちは、山田さん”
“`

ハッシュタグ検索を実装したいときに使えそう
“`ruby
keywords = ‘#今日のコーデ’

if keywords.start_with?(‘#’)
search_keywords = keywords[1..-1]
end
# 検索の処理が続く
“`

https://docs.ruby-lang.org/ja/latest/method/String/i/=5b=5d.html

元記事を表示

OTHERカテゴリの最新記事