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

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

【Rails】erbファイルのコメントアウト方法

# はじめに
プログラミング初学者の[@kat_log](https://twitter.com/kat__log “Twitter”)と申します。

railsの`.html.erb`形式のファイルのコメントアウト方法の共有です。

# 方法
**<%の直後に`#`を付ける。** ↓こんな感じです。 `<% コード %>`なら`<%# コード %>`
`<%= コード %>`なら`<%#= コード %>`

# おわりに
お読みいただきありがとうございました。
学習中の方、一緒に頑張っていきましょう〜?

# 参考
http://rails.takayukikoyama.com/erb/erb-comment/

元記事を表示

Railsのassert_templateとassert_selectの使い方

#はじめに
Railsチュートリアルを進めている中でassert_templateとassert_selectの二つのメソッドについて一旦自分なりにまとめておきたいので記事にします。

#assert_templateメソッドについて

レスポンスが正しいテンプレートとレイアウトを描画していることを検証する。

/users/new.html.erbが描画されているかどうかを検証する

“`rb
assert_template ‘users/new’
“`
assert_templateについてまだあるようなのですが現時点では理解しずらいと感じたため今後追記します。

#assert_selectメソッドについて
アクション実行の結果として描写されるHTMLの内容を検証する。
また、HTML要素内にキーが存在することを主張することで、 リクエストに対するレスポンスとなるビューの内容をテストする事が出来る。

#####assert_selectには2つの書式がある。

1. assert_select(セレクタ, [条件], [メッセージ])という書式は、セレクタで指

元記事を表示

selectメソッドとそれに関するメソッドの解説

「collectメソッドと同じメソッドを選べ」という問題は頻出なので、この際にまとめようとおもいます

## selectメソッド
selectメソッドは、調べたブロックが真であった場合、その要素を返すメソッドです。
真であるものがなかったら、空の配列が返ってきます
“`
(1..10).select {|i| i % 2 == 0 }
=> [2, 4, 6, 8, 10]

[3, 5, 7, 9].select {|i| i % 2 == 0 }
=> []
“`
### 似てるけど、違うメソッド
#### rejectメソッド
rejectメソッドは、調べたブロックの中で、偽であった要素を返すメソッドです。
偽であるものがなかったら、空の配列が返ってきます
“`
(1..10).reject { |i| i % 2 == 0 }
=> [1, 3, 5, 7, 9]

[2, 4, 6].reject { |i| i % 2 == 0 }
=> []
“`

#### grepメソッド
条件に一致した要素を配列で返します。条件に一致した要素がなかった場合、空の配列が返っ

元記事を表示

Rails 7でテーブルカラムの型不一致による外部キー追加エラーが発生した場合の解決方法

## はじめに

ローカル環境で `db:migrate` を実行したところ、突然以下のエラーが発生しました :thinking:

“`
Column `application_id` on table `oauth_access_grants` does not match column `id` on `oauth_applications`, which has type `bigint(20)`. To resolve this issue, change the type of the `application_id` column on `oauth_access_grants` to be :bigint. (For example `t.bigint :application_id`).
Original message: Mysql2::Error: Cannot add foreign key constraint
“`

#### 日本語訳

“`
テーブル `oauth_access_grants` の `application_id` カラムは `o

元記事を表示

Rails:ローカルでのタスクとHerokuの環境設定やDB操作など

## ローカル環境
コンソールの準備

“`:terminal
$ rails c
“`
タスクの読み込み
これで `schedular.rake` のタスクを利用できる

“`:terminal
$ Rails.application.load_tasks
“`
タスクの実行
“`:terminal
$ Rake::Task[‘タスク名’].execute
“`

## Heroku環境
ログ出力

“`:terminal
$ heroku logs -t
“`

環境変数の設定

“`:terminal
$ heroku config:set キー=”値”
“`

環境変数の確認

“`:terminal
$ heroku config
“`

データベースの情報取得

“`:terminal
$ heroku pg:credentials:url –app アプリ名
“`

データベースの操作

“`:terminal
$ heroku pg:psql -c SDL文
例) heroku pg:psql -c “select * from user

元記事を表示

DockerでRails7プロジェクト作成する方法 Rails7 + Mysql + esbuild + tailwind + pry-rails(デバッグツール)

# Dockerfile作成

まずはruby3とnodejsを使えるようにする

“`
FROM ruby:3.0

ENV APP /app
RUN mkdir -p $APP && \
apt-get update -y && \
apt-get install default-mysql-client nodejs npm -y && \
npm uninstall yarn -g && \
npm install yarn -g -y
COPY . $APP/

WORKDIR $APP
“`

# docker-compose.yml作成

“`docker-compose.yml
version: ‘3’
services:
app:
restart: always
build:
context: .
volumes:
– .:/app
“`

# イメージビルド実行

“`
docker-compose build
“`

# イメージビルドの確認

“`
docker i

元記事を表示

【pluckの使い方】複数のデータがあり絞り込みが出来ない場合

●状況
DBに大量にデータのあるテーブルA、テーブルB、テーブルCが存在する

①テーブルBはテーブルAのカラム1と一致するデータを検索
②テーブルCは、上記で絞り込んだテーブルBのカラム2と一致するデータを検索

“`ruby:model
テーブルA.each do |sample|
hoge = テーブルB.where(カラム1: sample.カラム1)
hoge2 = テーブルC.where(カラム2: hoge.カラム2)

〜省略〜

end
“`

上記を実行すると、「underfind method カラム2 for 〜」とエラーが発生する。

●解決策
テーブルCが複数のデータが必要な場合、
一度hogeの時点でカラム2の配列情報にして渡す必要がある。

現状の内容は、
hogeの内容を見ると下記のように「ActiveRecord::Relation」型となっている。

“`
#=>,
#

元記事を表示

FontAwesome6(Pro)をimportmapなRails7に組み込む

FontAwesome6がリリースされました。これをRails7 with importmap に組み込もうとしたところ、いくつかの知識が必要だったので共有します。それぞれを知っていれば特に難しい話ではないのですが、どなたかの役に立てばと思います。

Rails7ではwebpackerがなくなり、importmapで管理する必要があります。

webpackerにFontawesome Proを組み込むには、.npmrcに認証情報を書くなどして対応をする必要がありましたが、importmapではこのやり方が使えません。

ちょっとググっても方法が見つからなかったのですが、下記のようにすれば使えました。

# FontAwesome Pro Kit URLの取得

FontAwesomeのサイトに行き、Kitと呼ばれるツールを使い、FontAwesomeをサーブするURLを作る。
https://fontawesome.com/docs/web/setup/use-kit
FontAwesome 5以降はCDNではなく、このKitを使ってサーブするのを推奨しているようです。

# c

元記事を表示

▸ Error: docker build exited with Error: 1 & executor failed running [/bin/sh…] : exit code: 100 の対処法

だれでもエンジニア / 山浦清透 さんの[Docker超入門講座 合併版 | ゼロから実践する4時間のフルコース](https://www.youtube.com/watch?v=lZD1MIHwMBY)を拝見している時に、

“`:Command
Error: docker build exited with Error: 1
“`
とエラーが出てしまいました。。

#検証 1

https://qiita.com/akira-i/items/54462f5bd7fca868a818

を参考にしてVersionを変更してみましたが、エラーは解消されず。
https://gyazo.com/36e0631b46d5efc80180f35bcc338abc
ubutuの時は、バージョン変更でいけるらしいが、Rubyはどうやら違うぽい。

#検証2
Errorコードをよく見てみると

“`
ERROR [2/7] RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add – && echo “de

元記事を表示

Railsのid列は必ずしもきれいな連番にはならないんですよ、という話

## はじめに
Railsでモデルを作ると、テーブル定義上のid列(プライマリーキー)はデフォルトで自動的に連番が付与されるカラム(auto increment値)になります。

とはいえ、idにしたからといって必ずしも連番になるとは限りません。場合によっては「歯抜け(ギャップ)」が発生こともあります。
そのため、「idの最大値=そのテーブルの件数」になるとは限りません。

つまり、こういうデータが作成されることもありうる、ということです(たとえ一度もDELETEされなかったとしても)。

| id | name |
|—-|——-|
| 1 | Alice |
| 2 | Bob |
| 5 | Carol |

そこでこの記事ではRDBMS別にidの連番が歯抜けになるケースを見ていきます。

## この記事で使用するサンプルアプリ
この記事で使用するのは以下のようなモデルを1つだけ持つ、単純なRailsアプリです。

“`ruby
class Item < ApplicationRecord end ``` ```ruby:db/schema.rb A

元記事を表示

アプリを作る アカウントを有効化する

###app/models/user.rb
“`app/models/user.rb
class User < ApplicationRecord # 継承させる attr_accessor :remember_token, :activation_token before_save :downcase_email before_create :create_activation_digest validates :name, presence: true, length: { maximum: 50 } VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i validates :email, presence: true, length: { maximum: 255 }, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: fals

元記事を表示

【Ruby】dynamic constant assignmentというエラー

#状況
ページタイトルをapplication helperを使って動的に表示するために、以下のコードを書いた。

“`ruby:application_helper.rb
def full_title(page_title)
BASE_TITLE = “title”
BASE_TITLE.freeze
if page_title.empty?
BASE_TITLE
else
page_title + ” – ” + BASE_TITLE
end
end
“`
ここで、BASE_TITLEは定数であるため、UPPER_SNAKE_CASEで定義している。
またrubyにおける定数は再定義ができるソフトな(破壊的変更が可能な)代物なので、再定義ができないようにfreezeメソッドを使って凍結しておいた。

実行した結果、
syntax errorとして以下のエラーが表示された

“`
dynamic constant assignment
BASE_TITLE = “title”
^~~~~~~~~~
“`
#対処法
メソッドの外で定数を定義す

元記事を表示

RSpecでit / example / specifyはどのように使い分けるのか?〜日本語で書くならexampleって本当?〜

## はじめに

最近ときどき「RSpecで`it`/`example`/`specify`をどのように使い分けたら良いのか」という話題を見かけるので個人的な私見を書いてみます。

## 使い分けに何か決まりはあるのか? → 技術上の決まりは何もありません

`it`/`example`/`specify`は技術的にはまったく同じメソッドです。なので、`it`を`example`や`specify`に置き換えても問題なく動きます。

“`ruby
# itを使う
it ‘adds numbers’ do
expect(1 + 1).to eq 2
end

# itの代わりにexampleを使う
example ‘adds numbers’ do
expect(1 + 1).to eq 2
end

# itの代わりにspecifyを使う
specify ‘adds numbers’ do
expect(1 + 1).to eq 2
end
“`

日本語と英語で使い分けが必要、なんてこともありません。

“`ruby
# itを使う
it ‘数値を加算する

元記事を表示

error: failed to push some refs to “URL”が治らない….

#Herokuを用いたデプロイ時のエラー原因が、「メインブランチ以外で作業を行なっていたこと」だった件

チーム開発でGithubを用いながらWebアプリケーションの開発を行なっていた時に行き詰まってしまったエラーを共有します

###状況
Ruby on Railsで作成したアプリケーションをherokuにデプロイしたい!!

“`:terminal
voclabs:~/environment/railsアプリ名 (testbranch) $ git push heroku main
“`

Herokuを用いてRailsのアプリケーションをデプロイするときに何回やっても下記のようなエラーが出てしまう

“`:terminal
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs to ‘URL’
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: c

元記事を表示

rubyでの改行

rubyで、\nのようにして改行する方法は知っていたのですが、ほかにも改行するやり方があったので、それを紹介しようとおもいます。

##+を使った際の改行
“`
p (2+
1)
=> 3

p (2\
+1)
=> 3

p(2
.+1)
=> 3
“`

##文字列とシンボル、そして数値を改行する

“`
p “ho\
ge”
=> “hoge”

#\の直後にスペースが入っている
p “hoge\
ge”
=> “hoge \nge”

p :”ho\
ge”
=> “hoge”

p 10\
1
=>SyntaxError
“`

##ピリオドによる改行

“`
p 3.
to_s
=> “3”

p 3
.to_s
=> “3”
“`
ピリオドの場合は、ピリオドが改行前にあるか、改行後にあるかは関係ないんですね。

##メソッドを使うときの改行

“`
def hoge(a);
p “hoge:#{a}”
end

hoge(1)
=> “hoge:1”

hoge(
1)
=> “hoge:1”

hoge\
(1)
=> “hoge

元記事を表示

【Rails】form_withで送信した値をparams[:◯◯◯]を使ってコントローラーで取り出す方法。

フォームに入力した値をコントローラーで取り出したいことがよくあるのですが、いつも忘れてググっているのでメモに残しておきます。

##結論
###送信したデータ一式

“`
params[:<送ったモデル名>]
“`

###特定のカラムのデータ

“`
params[:<送ったモデル名>][:<カラム名>]
“`

##具体例

例えば、フォームが以下のような場合。

“`
<%= form_with(model: @glider_flight, local: true) do |f| %>
# フォームの各パーツ
<% end %>
“`

`glider_flight`というモデル宛てにデータを送信したら、コントローラーでは

“`
  params[:glider_flight]
“`

と記述する。

binding.pryで処理を止めて中身を確認すると、次のようなデータが取れていました。

“`
=> #“2022-02-08”, “departure_and_arrival_

元記事を表示

たった10行で簡単に絞込みセレクトボックス(Javascript無し)

# 親子セレクトボックス

1番目のセレクトボックス(ドロップダウンリスト)で選択すると、2番目のセレクトボックスで選択肢が絞り込まれる、あれです。(正式にはなんというのかわかりませんでした。ドリルダウン?)(とりあえず、1番目を親セレクタ、2番目を子セレクタと呼びます)

例としては、親セレクタで都道府県名を選択すると、その都道府県内の市町村に子セレクタの選択肢が絞り込まれるというありがちなパターンです。

その親子セレクタが、Rails 7 で採用された [Turbo](https://turbo.hotwired.dev/)([Hotwire](https://hotwired.dev/)) であれば、**ものすごく簡単**に実装できます。トータルで10行くらいです。Javascript は使いません(HTML と Javascript の知識は必要。)
環境を Rails 7.0.1 と Ruby 3.1 として、例を作成しながら説明します。
なお、Turbo 自体は Rails に依存しません。→[【Hotwire】HTMLだけで分かる Turbo ?](https://qi

元記事を表示

【Rails】where.notを連結するしないでクエリが異なる

下2つは同じクエリを吐き出すと勘違いしていたので備忘録。

“`ruby
where.not(tag: ”, user_id: 1)

where.not(tag: ”).where.not(user_id: 1)
“`

##where.notを複数連結

画像左

“`ruby
Post.where.not(tag: “Ruby”).where.not(user_id: 1)
=> SELECT `posts`.* FROM `posts` WHERE `posts`.`tag` != ‘Ruby’ AND `posts`.`user_id` != 1
“`

##連結しない
画像右

“`ruby
Post.where.not(tag: “Ruby”, user_id: 1)
=> SELECT `posts`.* FROM `posts` WHERE NOT (`posts`.`tag` = ‘Ruby’ AND `posts`.`user_id` = 1)
“`

![math.jpeg](https://qiita-image-store.s3.ap-n

元記事を表示

【Rails】お気に入り一覧ページでお気に入りを削除した際に、お気に入り一覧ページに戻る(元のページに戻る方法)

エンジニアを目指して、学習参考書のレビューサイトのポートフォリオを作成しています。
自分の備忘録かつ、似たような問題に直面した方の助けに少しでもなれるよう、記事を書かせていただいています。
間違いや問題、より良い方法などがありましたら、ぜひご指摘お願いいたします。

##直面した問題: お気に入り一覧に戻れない
参考書のお気に入り機能を追加し、「お気に入り一覧で参考書のお気に入りを削除→お気に入り一覧に戻る」という動作を実装しようとして、壁に当たりました。

それまでは、

“`ruby:favorite_books_controller.rb
@favorite_book.destroy
flash[:success] = “お気に入りから削除しました”
redirect_to @book
“`

としていました。

このようにした場合、**「参考書詳細ページでお気に入りを削除→参考書詳細ページに戻る」**という場合はこれで問題ありませんが、**「お気に入り一覧でお気に入りを削除→お気に入り一覧に戻る」**という動作が実現できませんでした。

元記事を表示

Rails【まとめ】

#データベース

データベースを一度削除して初期化

“`
rails db:migrate:reset
“`
→database “api_development” is being accessed by other users
データベース構造を前に戻す=ロールバック

“`
rails db:rollback
“`
###データベースを操作

“`
rails dbconsole
.table
.schema users(スキーマ=構造)
.quit
“`

“`
rails c
Post.find(1).destroy //id1を削除
“`

|用語|意味|
|–|–|
|マイグレーションファイル=|データベースを生成する際の設計図|
|レコード|一行!横!|
|||
|||

rails db:migrate:status

元記事を表示

OTHERカテゴリの最新記事