- 0.0.1. db:create で ActiveRecord::NoDatabaseError factory_bot_rails の原因が factory_bot で モデル.new しているから?
- 0.0.2. Webアプリケーションに正規表現を応用
- 0.0.3. bootstrap5 ドロップダウンが機能するまで
- 0.0.4. 【Rails6 API+React+nginx on Docker】フロントバック完全分離 Action CableでWebSocketリアルタイムチャット
- 0.0.5. 【RSpec】リクエストテストupdateで値が更新されないとき
- 0.0.6. 【個人開発】独学 + 職業訓練校でプログラミングを学び、ブックマークサービスを作りました。
- 0.0.7. 【FormObject】使ってみた
- 0.0.8. 【エラー】Invalid char `\x08′ in expression
- 0.0.9. 部分テンプレートのlocalオプションで変数指定
- 0.0.10. 【FormObject】バリデーションpresenceとuniquenessをどこに書くか
- 0.0.11. Railsで新規作成/編集の確認画面を作る
- 0.0.12. 【Rails】Basic認証を本番環境にだけ通す
- 0.0.13. 正規表現について②
- 0.0.14. dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.68.dylibの解決方法
- 0.0.15. RailsにおけるHTTPリクエストについて
- 1. RailsにおけるHTTPリクエストについて
- 2. メニュー
db:create で ActiveRecord::NoDatabaseError factory_bot_rails の原因が factory_bot で モデル.new しているから?
# はじめに
製作中のアプリケーションにて、一度データベースを消して、再度作り成そうとしたところ、 `NoDatabaseError` が発生しました。
`rails db:create` を実行しているのに、 `NoDatabaseError`? と思いましたが、エラーの内容を見る限り`factory_bot`に関係があることだけはわかります。“`zsh:console
username@pc article_app % rails db:drop
Dropped database ‘article_app_development’
Dropped database ‘article_app_test’username@pc article_app % rails db:create
rails aborted!
ActiveRecord::NoDatabaseError: Unknown database ‘article_app_development’
/Users/username/projects/article_app/spec/factories/artic
Webアプリケーションに正規表現を応用
#①.Ruby on Railsにおけるバリデーションへの応用
どのような正規表現で、バリデーションが設定されているのか理解しておきましょう!
よく使われる以下の3つを紹介します!
・郵便番号
・全角かな/カナ漢字の区別
・passwordの英数混合の判断
#②.郵便番号について考える!
郵便番号は、3桁の数字とハイフンと4桁の数字で構成されています!
ユーザーが正しくハイフンが記入された正しい形式で郵便番号を入力しているか判別する方法を学びます!
この郵便番号を正規表現らしく言い換えると、先頭に少なくとも3回の数字、そしてハイフン、末尾に少なくとも4回の数字 となります!
“`php:例
irb(main):001:0> postal_code = “150-0044”irb(main):002:0> postal_code.match(/\A\d{3}[-]\d{4}\z/)
=> #
“`新しい表現方法が出てきたので、以下の2つについて解説します!
\A
\z
#\A
\Aの直後に置いた文字を、文
bootstrap5 ドロップダウンが機能するまで
#はじめに
railsチュートリアルをローカル環境で、2021年11月現在で最新のgemを使って進めています。
ヘッダーのドロップダウン機能を同じように実装してもうまくいかなかったので色々調べて機能するまでを備忘録としてまとめました。#筆者の環境
Macbook Air(M1, 2020)
macOS Big Sur バージョン11.4`ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [arm64-darwin20]`
`Rails 6.1.4.1`
`bootstrap 5.1.0`#ドロップダウンリンクをクリックしても表示されなかった
railsチュートリアルで使用されているbootstrap3と2021年11月現在で最新のbootstrap5では変更になったクラスが多いので[Bootstrap5公式](https://getbootstrap.jp/docs/5.0/getting-started/introduction/)と[チートシート](https://bootstrap-cheatsheet.themesele
【Rails6 API+React+nginx on Docker】フロントバック完全分離 Action CableでWebSocketリアルタイムチャット
## 概要
RailsとReactでAction Cableを使用したリアルタイム通信を行う必要があり、RailsとReactで実装していた記事は見かけましたがRailsをAPIサーバーとして実装しているものがなかったので書いてみました。フロントとバックを完全に分離した[構成](https://github.com/nakanoi/rails_react_actioncable)で、RailsのAction Cableを使用したチャットを実装します。
nginxを使用していますが、使用しない場合でも同様に動作します。
### デモ
![demo](https://user-images.githubusercontent.com/72122101/140938951-9109cfcb-b95f-412f-b48d-4feb0c7fb403.gif)## GitHub
[完成版](https://github.com/nakanoi/rails_react_actioncable)
[以前の記事](https://qiita.com/nakaoi/items/411e15fd
【RSpec】リクエストテストupdateで値が更新されないとき
##環境
Ruby 3.0.2
Rails 6.1.4.1employee.update(post_params)でDBの値を更新するとテストが通る。
“`spec.rb
context ‘記事を編集する際、正しい値の場合’ do
let!(:post) { create(:post) }
let!(:post_params) { attributes_for(:post, title: ‘other’) }
it ‘記事を編集できること’ do
subject
employee.update(post_params)
expect(response).to have_http_status(302)
expect { subject }.not_to change(Post, :count)
expect(post.title).to eq ‘other’
end
end
“`
【個人開発】独学 + 職業訓練校でプログラミングを学び、ブックマークサービスを作りました。
# 1. はじめに
シンプルを追求したブックマークサービス「5Keeps」(ファイブキープス)を作りました。|![5Keeps_ogp_jp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1048052/ecccda94-9098-ca42-c67e-6eb9e5aa5a1f.png)|
|:–|2020年11月に未経験からプログラミングの学習を開始して、あっという間に1年が過ぎ去り、ようやく自作アプリのリリースにこぎつけました。この記事では、前半に開発したサービスについて解説し、後半に1年間の学習の過程をまとめています。
– 5Keepsへのリンク
https://www.5keeps.com/– ソースコード
https://github.com/daichihayasaka/five_keeps_ver01# 2. サービスについて
### 2-1. サービス概要
#### 解決したい課題
プログラミング学習の環境は、時間や場所によって様々です。私の場合、家やカフェではMacb
【FormObject】使ってみた
##環境
Ruby 3.0.2
Rails 6.1.4.1##状況
userとemployeeテーブルの作成と更新を一つの画面で行いたいとき、
accepts_nested_attributes_forは非推奨なのでFormObjectを使ってリファクタリングしてみた。“`app/models/employee.rb
class Employee < ApplicationRecord ... accepts_nested_attributes_for :user ... end ``` ##メリット コントローラーがすっきりする ##EmployeeForm ```app/forms/employee_form.rb class EmployeeForm include ActiveModel::Model include ActiveModel::Attributes attribute :firstname, :string attribute :lastname, :string attribute :number, :integ
【エラー】Invalid char `\x08′ in expression
##環境
Ruby 3.0.2
Rails 6.1.4.1##状況
見たことないエラー
“`
Invalid char `\x08′ in expression
“`##原因
キーボードの全角半角切り替えの際に全角のスペースが入ってしまってた。
Vscodeに「zenkaku」を入れて、もし全角スペースが入ったら可視化するようにしていたのに
このエラーが出たときは全角スペースが見えなかった!##解決法
見えない全角スペースを削除https://tattaka-s.hatenablog.com/entry/2019/07/06/153703
部分テンプレートのlocalオプションで変数指定
##環境
Ruby 3.0.2
Rails 6.1.4.1##
form_with以下を部分テンプレートにしたいため、
localオプションで変数fを指定する。
ここではlocalオプションで変数“`form“`と“`f“`の2つ指定してることになる。“`new.html.slim
= form_with model: @user_form, url: manage_user_path, local: true do |f|
= render ‘form’, form: @user_form, f: f
“`“`edit.html.slim
= form_with model: @user_form, url: manage_users_path, local: true do |f|
= render ‘form’, form: @user_form, f: f
“`“`_form.html.slim
= f.label :number, ‘No.’
= f.number_field :number= f.label :name,
【FormObject】バリデーションpresenceとuniquenessをどこに書くか
##環境
Ruby 3.0.2
Rails 6.1.4.1##FormObject
バリデーションの記述はModelではなくFormObjectに切り出したほうがよいという内容の記事を見つけた。ActiveModel::ModelをincludeしてればModel同様にバリデーションを書ける。
バリデーションpresenceはFormObjectに切り出す。“`app/forms/employee_form.rb
class EmployeeForm
include ActiveModel::Modelwith_options presence: true do
validates :firstname
validates :lastname
end
end
“`バリデーションuniquenessはDBとやり取りして判定するバリデーションのため、Modelの方に書く。
“`app/models/employee.rb
class Employee < ApplicationRecord validates :number,
Railsで新規作成/編集の確認画面を作る
## はじめに
確認画面の情報は既にいくつも公開されていますが、編集の際の確認画面に関しては、あまり見当たらなかったため記事にしました。### 開発環境
– Rails 6.0.3.1
– Ruby 2.6.8### やりたいこと
既に新規登録/編集機能があるアプリにて、それぞれ投稿の前に確認画面を挟みたい。
今回は、`title`と`content`というカラムを持つ`Blog`モデルに関して実装していく。## 新規投稿の確認画面
### Controllerの実装新規投稿の際のcontrollerは以下のようになります。
“`blog_controller.rb
def new
@blog = Blog.new
enddef confirm
@blog = Blog.new(blog_params)
render :new if @blog.invalid?
enddef create
@blog = Blog.new(blog_params)if params[:back] || !@blog.save
rend
【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:createStarting 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