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

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

【Rails】Basic認証を本番環境にだけ通す

Basic認証を導入して、結合テストコードを書く・・・・・
ん?始まるときに認証画面が出てきてしまう:confused:

本番環境だけに認証が通るようにできないものか探ってトライしてみたら成功したので、
備忘録として残します:black_nib:

:::note info
macOS Monterey
Ruby 2.6.5
:::

**本番環境以外ではBASIC認証しないように設定**

“`ruby:app/controllers/application_controller.rb
class ApplicationController < ActionController::Base before_action :basic_auth if Rails.env.production? #本番環境以外ではBASIC認証しないよう分岐 private def basic_auth authenticate_or_request_with_http_basic do |username, password| username == 'admin

元記事を表示

正規表現について②

#①.正規表現のさまざまなパターン!

前回はsubメソッド、matchメソッドの基本的な使い方を学習しました!

ここからは正規表現のさまざまなパターンを使い、より応用的な使用方法を見ていきます!

今回紹介するパターンは以下の3つです!

・電話番号のハイフンを取り除く

・パスワードに英数字8文字以上という制約を設定する

・メールアドレスからドメインの部分のみ抽出する

#②.電話番号のハイフンを取り除く!

特定の文字を取り除く場合は、「特定の文字を空文字に置換する」と考えます!

置換するメソッドはsubメソッドでした!

しかしながら、subメソッドでは最初のハイフンしか置換されません!

そこでgsubメソッドを用いることにします!

#gsubメソッド

gが意味するのはグローバルマッチという言葉です!

文字列内に指定した文字が複数含まれている場合、その全てを置換するという意味になります!

gsubではなくsubを使用した場合、最初にマッチした1つだけが置換されます!

“`php:ターミナル
irb(main):001:0> tel = ‘090-1234-5

元記事を表示

dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.68.dylibの解決方法

# 環境
macOS Big Sur ver11.6
Rails 6.0.4.1

# エラー内容

学習のために、railsで新規アプリを作成しようと際に、

“`
$ rails new (アプリ名)
“`
を実行したところ、以下のエラーが発生しました。

“`
(省略)
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock –add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
run bundle exec spring binst

元記事を表示

RailsにおけるHTTPリクエストについて

RailsにおけるHTTPリクエストについて

1.get → 通常アクセス、ページを表示
2.post → フォームを使ってデータを送信
3.patch/put → データを更新を行う
4.delete → データの更新を行う

***
railsのアプリケーション開発を学んでるときに出てきた内容をまとめてみました。

元記事を表示

Vagrant環境でRailsアプリケーションのDBを削除しようとすると、Errno::ETXTBSY: Text file busy @ apply2filesのエラーが発生した。

表題の通り、Vagrant環境で作成したRailsアプリケーションでデータベースを削除しようとした際にエラーが発生しました。
ググってみると海外の記事だったり、曖昧な表現の記事が多かったため、自分なりに手順をまとめました。

**実行環境**
– Windows10 20H2
– Vagrant 2.2.18
– Ubuntu 20.04.3 LTS

### データベースの削除
以下のコマンドを使うと、データベースを削除することが出来るので実行します。
“`
rails db:drop
“`
![rails_drop.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2259269/515f155e-9c6c-f46a-e685-3e2f84d7aad3.png)
Couldn’t drop database ‘db/development.sqllite3’
**出たわねっ!**
正直何かしら出る気しかしませんでした。エラー読み解いていきます。

元記事を表示

【Rails】html_safeを使用することで発生する脆弱性とその対策

## 結論

– html_safeを使用するのであれば、xss対策としてhメソッドを使用する必要がある。

“`ruby
text = “テスト\nテスト”

<%= h(text).gsub(/\n/, "
“).html_safe %>
“`

## 経緯

– devise.ja.ymlで定義した文章を改行するタスクがあり、それを実現するために、以下の実装を行った。
1. devise.ja.ymlに改行コード(\n)を埋め込む
2. html_safeを使用して改行を実現

よし。これで改行を表現することができた。よろしくおねがいしまーす。タンッ!

その後、プルリクのコメントに「xss対策をしてください。」の文字。

・・・?

### xss(クロスサイトスクリプティング)

– 脆弱性の一種
– 第三者がWebページにスクリプトを自由に組み込める状態のこと
– スクリプト上で意図していないスクリプトを埋め込まれ、情報を盗み取られる危険性がある

自分が実装した内容だとscriptタグを埋め込まれて情報を盗み取られる危険がある実装をしていたという

元記事を表示

正規表現について①

#①.結論!

正規表現とは、文字列の一部分を抽出・置換したり、文字列が制約を満たしているかを調べるための表現方法です!

さまざまなアプリケーションに触れてきた中で、「パスワードが6文字未満だったり、メールアドレスに@が入っていなかったりするとユーザー登録ができないのは、どのように判断されているのだろう?」 と疑問に思ったことがあるかもしれません!

これらはすべて正規表現という技術を用いて実装されています!

#②.正規表現を用いるシーンをイメージ

登録フォームに電話番号を記入する欄があります!

Aさんはハイフンを付けて入力しましたが、Bさんはハイフン無しで入力をしています!

そのままデータベースに保存すると、異なるフォーマットで保存されてしまい管理が大変です!

フォーマットを統一させるために、入力された電話番号にハイフンが入っていたら必要に応じて処理をしてあげます!

“`php
webページ
電話番号 電話番号 ハイフンを取り除く処理

090-1111-2222 09011112222 090-111

元記事を表示

NoMethodError: undefined method `host’ for #

docker-compose run app rails db:create を実行したら以下のエラーが発生しました。

“`
$ docker-compose run app rails db:create

Starting ecs_db_1 … done
Creating ecs_app_run … done
rails aborted!
NoMethodError: undefined method `host’ for #

元記事を表示

Railsのテンプレートエンジンをslimからerbに戻した理由

#はじめに
Railsで開発をする際にslimを使っていましたが、元のerbに戻すことにしました。本記事ではslimのメリットとデメリットを比較し、slimからerbに戻した理由について説明します。
#slimとは?
slimはRailsで使うテンプレートエンジンの1つです。slimを導入することで、通常のhtmlよりも記述量を減らすことができます。
例えば、次のように< >と閉じタグは省略されます。

“` html:html

メニュー

  • Ruby
  • on
  • Rails

“`

“`slim:slim
div
h1 メニュー
ul
li Ruby
li on
li Rails
“`

詳細な文法は↓にリンクを貼っておきます。

https://github.com/slim-template/slim/blob/master/README.jp.md

https://qiita.com/ngro

元記事を表示

【Rails】日本語に変換したcreated_atを配列にする

初学者のインプット内容の整理のための記事です。
‘rails-i18n’gemを使ってモデルのcreated_atを日本語で配列としてインスタンス変数に保存する方法です。

参考にしたページ:
https://opiyotan.hatenablog.com/entry/rails_gem_i18n
https://teratail.com/questions/53958

#準備

“`Gemfile.
#追加
gem ‘rails-i18n’
“`
“`
bundle install
“`

次にconfig/locales/ja.ymlを作成する。
rails-i18n/ja.yml at master · svenfuchs/rails-i18n · GitHub の内容をそのファイルにコピペする。

#配列取得

“`
#通常の実行結果
@items = @user.items.map{|item| item.created_at}
puts @items
=> 2021-11-07 21:09:50 +0900
2021-11-07 21:07:41 +0

元記事を表示

rails s が実行できない【エラー:LoadError(nokogiri), RuntimeError/ENOENT(webpacker)】【ターミナル再起動】

ターミナルで `rails s` を実行した際に起こったエラーたち

##環境
OS:macOS Monterey12.0.1
Rails:6.1.4.1(2021/11/07現在最新版)

:::note info
前提となる、Ruby(3.0.2), SQLite3(3.36.0), Node.js(16.13.0), Yarn(1.22.17), Homebrew(3.3.2), rbenv(1.2.0) はインストール済み(2021/11/07現在最新版)
:::

##問題1: nokogiriに関するエラー(LoadError)

“`
cannot load such file — nokogiri/nokogiri (LoadError)
 :
(省略)
 :
dlopen(/Library/Ruby/Gems/2.6.0/gems/nokogiri-1.12.5-x86_64-darwin/lib/nokogiri/2.6/nokogiri.bundle, 0x0009): tried: ‘/Library/Ruby/Gems/2.6.0/gems/nokogir

元記事を表示

RansackでActionTextの中を検索する

# はじめに
Ransackは、複雑な検索機能でも簡単に作れるGemです。そして、ActionTextはRails6から導入されたリッチテキストを簡単に製作できる機能です。
RansackでActionTextの中を検索できないという記事がありましたが、どうやら検索できるようなので、記事を書こうと思いました。

# 注意
RansackやActionTextの導入は割愛させていただきます。
大事なところだけです。
また、恥ずかしながら私自身がRailsを勉強中なこともあり、完全に理解しれきていないと思いますので、他の記事でも調べて頂いた方がいいと思います。最大限頑張って説明させていただきます。

# 結論
Ransackで検索するためには、モデルにアソシエーションを追加する必要がありました。
結論としては、has_oneの行が必要ということです。
2つ同じ指定のように思えますが、片方が読み書き用で、片方が検索用と考えてもらうといいと思います。

“`app/models/message.rb
class Message < ApplicationRecord has_rich_t

元記事を表示

【RSpec】Railsチュートリアル第6版 第12章

#はじめに
Railsチュートリアル第6版のテストをRSpecで書き直していく。

###目次
– [第3章](https://qiita.com/supyolo888/items/35081ead2cfafb40a995)
– [第4章](https://qiita.com/supyolo888/items/939b670b62eb18467f6d)
– [第5章](https://qiita.com/supyolo888/items/42234ac2ed3919b14586)
– [第6章](https://qiita.com/supyolo888/items/bd10e64c77fe391cf203)
– [第7章](https://qiita.com/supyolo888/items/d2824ced26402b5f58d1)
– [第8章](https://qiita.com/supyolo888/items/508caaa40edf307093ed)
– [第9章](https://qiita.com/supyolo888/items/62e471b07a0c9a81575

元記事を表示

action_mailboxやactive_storageをRailsのルーティングに表示しないようにする

Rails6以降でrails new直後に`rake routes`を実行すると以下のような結果が表示されます。

“`rb
~ 省略 ~
rails_postmark_inbound_emails POST /rails/action_mailbox/postmark/inbound_emails(.:format) action_mailbox/ingresses/postmark/inbound_emails#create
rails_relay_inbound_emails POST /rails/action_mailbox/relay/inbound_emails(.:format) action_mailbox/ingresses/relay/inbound_emails#create
rails_sendgrid_inbound_emails POST /rails/action_ma

元記事を表示

[Rails]Formオブジェクトにアソシエーションが定義できない理由

### 解決したいこと

Formオブジェクトに、アソシエーションが定義できないのはなぜか。

### 立てた仮説

アソシエーションは、モデルを利用した「テーブル同士」の関連付け。
テーブル間アクセスに関する設定なので、
そもそも「テーブルがない」フォームオブジェクトにはつけられないと考えた。

フォームオブジェクトにattr_accessorメソッドで、
モデルの属性を追加し、「操作」可能にはするが、
実際に値を保存するのはモデルのテーブルであって、
フォームオブジェクトのテーブルではない。

上記を踏まえると、
ActiveStorageのhas_one_attachedも
フォームオブジェクトにはつけられないと考える。
こちらも、モデルの1つのレコードのidに紐付いて管理されるので、
そもそもレコードを持てないフォームオブジェクトは使えないと考えた。

### 質問して確認した結果

考え方はok。
ちなみに、一意制約もフォームオブジェクトはつけられない。
なぜなら、DBに一度検索しに行くから。

has_one_attachedに関しては、同じ意見を持つが、
検証してみない

元記事を表示

M1 Mac(Big Sur)でmysql2をインストール

いつもエラー出て
調べて
全く違う記事が出るので

2021/11/07時点で良さそうな対応

“`
brew install openssl
bundle config –global build.mysql2 “–with-opt-dir=”$(brew –prefix openssl) –with-ldflags=-L/opt/homebrew/Cellar/zstd/1.5.0/lib””
“`

元記事を表示

用意された機能を呼び出す方法!

#①.ライブラリ

ライブラリとは、汎用性の高いプログラムを再利用可能な形でまとめたものです!

Rubyではライブラリに用意されている機能を呼び出すことによって、プログラムを動かしています!

Rubyには、最初からさまざまな機能が用意されています!

プログラムを書くということは、この機能を適宜呼び出して使用することと言い換えてもよいでしょう!

文字列を記述する、数値を計算する、配列で複数の要素を管理するなど、これらはすべてRubyというプログラミング言語に用意された機能です!

そして、ライブラリには大きく分けて以下の3種類があります!

#②.標準ライブラリ

Rubyに標準で用意されているライブラリです!

インストールは不要ですが、使用する際には明示的に読み込む必要があります!

代表的なものとして、日付を扱うDateクラスがあります!

#③.組み込みライブラリ

標準ライブラリの中でも、特に利用する頻度が高いライブラリです!

文字列のStringクラスや数値のIntegerクラス、配列のArrayクラス、ハッシュのHashクラスなどが該当します!

使用する際の読み

元記事を表示

APIとは

最近学習しているAPIについて改めて復習したいと思います。

# APIとは

> アプリケーションプログラミングインターフェースの略。
サーバが提供している機能やデータを、httpで通信して利用するための機能の一つ。
データの形式は最近はJSONで返される。

## APIで出来ること

仕様例
・Google Maps API (住所を地図で表示させる)
・楽天商品検索API(キーワードから楽天市場の商品を検索することができる)
・Twitter API(コードを書けば、Twitterを開かずに特定のツイートにリツイーやリプライができる)

## RailsをAPIモードで実行するには

rails newの際に `–api` を入力する。

“`
rails new myapp –api
“`

## APIモードとのファイル差分

ざっくり言うと、ビューファイルやUI関連のgem等が省かれて生成される。

https://qiita.com/61503891/items/d4eda649a10a3494830c

次回はpostmanを使ってログイン認証したいと思いま

元記事を表示

Shopify のデータを BigQuery にエクスポートする方法(Ruby)

## 前提
– Shopify のデータは Bulk Operations で取得する物とします。詳しい方法は[公式ドキュメント](https://shopify.dev/api/usage/bulk-operations/queries)をご覧ください。
– BigQuery へのデータのエクスポートには [google-cloud-bigquery gem](https://github.com/googleapis/google-cloud-ruby/tree/main/google-cloud-bigquery) を使用します。

## 実装

“`:Gem
$ gem install google-cloud-bigquery
“`

“`ruby
require “google/cloud/bigquery”
require ‘open-uri’

# Ref: https://googleapis.dev/ruby/google-cloud-bigquery/v1.37.0/file.AUTHENTICATION.html
Google::Cloud::Bigque

元記事を表示

配列内の要素を自動集計するメソッド

## 開発環境
`ruby 2.6.5`
`Ruby on Rails 5.2.5`

[“京都府”, “東京都”, “東京都”, “東京都”, “東京都”, “東京都”, “東京都”, “東京都”, “東京都”, “東京都”, “東京都”, “東京都”, “東京都”, “広島県”, “東京都”, “東京都”, “東京都”, “東京都”, “島根県”, “東京都”, “東京都”, “茨城県”, “東京都”, “東京都”, “東京都”, “東京都”, “東京都”, “東京都”, “東京都”, “広島県”, “広島県”, “東京都”, “東京都”, “東京都”, “東京都”, “東京都”, “広島県”, “広島県”, “広島県”, ” 島根県”, “東京都”, “東京都”, “東京都”, “東京都”, “東京都”, “東京都”, “東京都”, “東京都”, “京都府”, “東京都”, “東京都”, “東京都”, “東京都”, “東京都”, “東京都”, “東京都”, “東京都”, “東京都”, “東京都”, “千葉県”, “東京都”, “東京都”, “東京都”, “東京都”, “広島

元記事を表示

OTHERカテゴリの最新記事