- 0.0.1. 【Rails】Modelに定義した定数をControllerやViewで使用する方法
- 0.0.2. ActiveRecord の update, save は Dirty じゃないとき UPDATE 文を発行しないので別のオブジェクトで同一のレコードを扱うときに注意
- 0.0.3. 【入門】DockerでRailsのAPIモードを環境構築しHerokuへ本番反映する手順
- 0.0.4. 【Rails】DBの一意性について【備忘録】
- 0.0.5. 【Ruby】メソッドの後の感嘆符”!”について
- 0.0.6. RDS MySQLとAuth0を繋げる
- 0.0.7. 【Ruby】Railsでリクエストのバリデーションを行うライブラリ`rails_param`
- 0.0.8. [Rails6]グループ機能を実装する
- 0.0.9. Ruby on rails JqueryとBootstrapが反映されない
- 0.0.10. 【Rails】リマインダーメールの実装
- 0.0.11. バリデーションが実行された後、jsが機能しない
- 0.0.12. WIP【Viewがレンダリングされるまでの技術とその理解 / Aaron Patterson 】Aaron PattersonさんがYouTubeで説明していたコードにビューを付けてみる
- 1. users#index
- 2. users#new
- 2.0.1. ActiveRecord::Enum
- 2.0.2. find/ find_by/whereの違い
- 2.0.3. bundle install で `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/' と言われてうまくいかない
- 2.0.4. [Tips]insertメソッドでコールバックを発火させずに単一のレコードを作成する(Rails)
- 2.0.5. 【もうやらかさない】開発DBのデータを全部消しちゃったお話(改善策もあるよ)
- 2.0.6. The resource ファイル名 was preloaded using link preload but not used within a few seconds from the window's load event.
- 2.0.7. undefined method `permit' for "1":String に手こずった。
- 2.0.8. 初めてのウェブサービスに縦書きエディタを選んだ理由(2)
【Rails】Modelに定義した定数をControllerやViewで使用する方法
## はじめに
どうも、もきおです。RailsでModelに定義した定数をControllerやViewで使用する場面が実務でちょくちょく使う事があり、どうやって参照するんだっけ?と思ったので、調べたのをメモとして残しておきたいと思います。## 結論
定数を参照するには**Model名(Rubyならクラス名)::定数名**で参照する事ができます。
“`ruby:
MAIN_USERS = [“Bob”, “Keny”, “John”, “July”, “Karen”].freezeUser::MAIN_USERS
# => [“Bob”, “Keny”, “John”, “July”, “Karen”]
“`
## 具体例
さて、具体例に入っていきましょう。今回はユーザー登録の際、SNSのURLを入力する欄があるとします。その際、省きたいURLを予め定数として登録しておき、実際入力され渡ってきたURLと定義していた定数が部分一致する場合、バリデーションでアラートを表示するというパターンで記述したいと思います。まずは良く使うものをmodelに定数定義しましょう。“.fr
ActiveRecord の update, save は Dirty じゃないとき UPDATE 文を発行しないので別のオブジェクトで同一のレコードを扱うときに注意
[ActiveRecord#update](https://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-update), [ActiveRecord#save](https://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-save) はDirtyな値を持たない時、実際のUPDATEを行わない。便利機能だけど、更新対象を複数の変数に受けている場合、ちょっと予想外の挙動をするので注意。
“`ruby
user = User.find(42)
user.name # => ‘Tarou’current_user = User.find(42)
current_user.name # => ‘Tarou’current_user.update!(name: nil)
user.update!(name: ‘Tarou’) # => Dirty でないので UPDATE 文が発行されず、 DB の nam
【入門】DockerでRailsのAPIモードを環境構築しHerokuへ本番反映する手順
## はじめに
今回はDockerを使ってRailsAPIの環境構築および簡単なアプリ開発を行い、ローカルで作成したDockerコンテナをHerokuに置いて本番反映する流れを解説していきます。
Railsの環境構築およびAPIの開発そして本番反映の流れを学びたい人はぜひ参考にしてみてください。
## この記事の対象者
– Dockerを使ってRailsAPIの開発をしたい人
– Dockerで作成したアプリをHerokuを使って本番反映したい人
– ポートフォリオ開発をこれからしたいと思っている人## この記事でやらないこと
– Railsの細かい文法説明
– Dockerについての詳しい解説
– Herokuについて詳しい解説上記において必要箇所は解説を都度入れますが、「そもそもdockerとは」といった細かい箇所の解説については参考記事を貼っているのでそちらを参考にしていただければと思います。
## この記事の目標
– Dockerを使ったRailsAPIの開発
– Dockerで作成したコンテナをHerokuに反映し本番公開する## Dockerで
【Rails】DBの一意性について【備忘録】
本記事はRailsチュートリアル6.2.5の備忘録です。
URL:https://railstutorial.jp/chapters/modeling_users?version=5.0#sec-uniqueness_validation内容としては、ユーザ(Userクラス)のメールアドレス(email)を一意なものとして定義し、そのテストをしていくというものです。
アプリ側(モデル)とDB側の両方で、一意性を設定することができますが、結論から言うとどちらも設定する方が良いようです。それでは詳細に説明していきます。
アプリ側では、以下のように一意性を持たせることができます。
“`ruby:アプリ側
class User < ApplicationRecord … validates :email, presence: true, length: { maximum: 255 }, format: { with: /正規表現/ }, uniqueness: true #####追記####
【Ruby】メソッドの後の感嘆符”!”について
メソッドの中には、破壊的にデータを変更してしまうものがあり、慣習として名前に”!”が付けられます。
例えば、以下のコードがあったとします。
“`
self.email = self.email.downcase
“`
参考:Railsチュートリアル 第4版 6章より
https://railstutorial.jp/chapters/modeling_users?version=5.0#sec-minimum_password_standards上記だと右辺で”self.email”を全て小文字にしてから自身に代入することで更新していますが、
.downcase!メソッドを用いることで、直接”self.email”の値を変更することができ、より簡潔に書けます。“`
self.email.downcase!
“`破壊的なメソッドは便利そうですが、一方で元の値を強制的に上書きするので、使いどころには注意ですね。
【追記2022/08/26】
@nodai2h_ITC 様よりご指摘を頂きました。
以前、”!”をメソッドに付けると破壊的なメソッドになると勘違いしていまし
RDS MySQLとAuth0を繋げる
こんにちは。SARAHの沈(シム)です。
最近認証基盤をRailsのdeviseからAuth0への切り替えを行う作業があり、Auth0と既存のDBを繋げる機会がありまして、
自分が学んだ内用を共有しようかと思います。目的
—
– RailsのDevise認証からAuth0への認証基盤を移行
– DBのユーザーデータは維持する(Export/Importなし)
– Auth0のOpen ID Connect(以下OIDC)を付けてAPI Gatewayを保護Auth0へ移行した理由
—
弊社のFoodDataBankサービスがRuby on Railsで構築されましたが、これから追加する機能を考えた時に拡張性が低く、開発パフォーマンスもあまり出ない状況であるため、フロント側を新たに構築する流れになりました。RailsのAPIを立ち上げるとDeviseとの通信で認証はできますが、メンテナンス、コストなど色々考えたところ、Railsに載せるより、Auth0を用いて進むのがフロント側の認証繋ぎの負担も下がるし、将来的にEC2で立ち上げたRailsもなくなることによってコスト削減
【Ruby】Railsでリクエストのバリデーションを行うライブラリ`rails_param`
## 概要
Railsでリクエストのバリデーションを行う場合、[Rails基礎 ストロングパラメータとバリデーション](https://hpsuzucat.hatenablog.com/entry/2020/10/24/224143)の記事にある通り、ApplicationRecordの機能を使用する方法などが挙げられます。もちろん、この方法でも全然良いのですが、ApplicationRecordのモデルに通す前に、controllerでバリデーションしたい時もあるなと感じました。
何かないかなと調べてみた結果、`rails_param`というライブラリが良さげだったので、今回少し紹介します。## 機能など
[nicolasblanco/rails_param](https://github.com/nicolasblanco/rails_param)に、ライブラリのReadmeがあります。パラメータの、型指定や、必須チェック、最小値・最大値など基本的なチェックは出来そうです。また、項目毎にエラーのメッセージもカスタムで設定できます。## 実装サンプル
以下はAPIで、文字列の
[Rails6]グループ機能を実装する
### 前提
記事を書いている私は現役のエンジニアではなくエンジニアを目指して学習中の者です。
よって、気をつけてはいますが記述内容には誤った内容が含まれている危険性があります。
その為この記事は参考程度に読んで頂き詳しい内容は公式の記述を参考にすることをおすすめします。### この記事で実装すること
Rails6系のPFでグループ機能を実装したのでその時の手順と詰まった箇所についてまとめました。
PFは卒業アルバムページを作成できるようになっており、そのアルバムを共有するメンバーをグループで設定しています。
よって以下のような機能を持ちます。
– アルバムに招待するメンバーを選択できる
– アルバムメンバーにだけ該当するアルバムを表示する### 使用技術
Ruby 3.1.2
Rails 6.1.6### 実装手順
既に以下のモデルを持つアプリを作成した前提で進めていきます。
**Userモデル**
ユーザーは複数のアルバムを持つことができます。
“`ruby:user.rb
has_many :albums, dependent: :destroy
“`
**Alb
Ruby on rails JqueryとBootstrapが反映されない
今日は、RailsのTutorialsでJqueryとBootstrapをインストールした後、Dropdownの反映がされなかったので、その対処法についてまとめました。
まずは、こちらのコードを実行しました。
~~~app/javascript/packs/application.js
//= require jquery
//= require bootstrap
~~~そして、
~~~app/assets/stylesheets/custome.scss
@import “bootstrap”;
~~~
を追加しました。
しかし、これでは動かず、、~~~app/layouts/application.html.erb
【Rails】リマインダーメールの実装
## はじめに
個人開発において、ユーザーにリマンダーメールを送信したいと思ったのですが、体系的にまとめられているドキュメントを見つけるのに苦労しました。
自分と同じような初学者だとつまずく部分もあるかと思いますので、本記事でモデルの作成から順に説明していきます。## やりたいこと
- 毎日、日本時刻AM9:00に、開始時刻が次の日になっているスケジュール(以下、イベントと言います。)を登録したユーザーにメールでリマインドする。
- 各ユーザーは、リマインド機能のオンオフを切り替えられる。(初期状態はオン)
- メール送信側はGmailを使用
## 開発環境
Ruby 3.1.2
Rails 6.1.6
## 実装
### 【モデル】
今回、必要となるモデルは、以下の2つです。
- ユーザー(User)モデル:どのメールアドレスに送信するのか、リマインド機能のオンオフ(deviseを使用)
- name(ユーザー名) :string
- email_receiving_activation(リマインド機能のオンオフ) :boolean
- メールアドレスやパ
バリデーションが実行された後、jsが機能しない
# はじめに
本記事はプログラミング初心者が、railsの学習を進めながら、躓いた部分、解決した箇所、またそれらの解決方法を備忘録も兼ねてまとめているものです。
最初はprogate。そのあと、「現場で使える RubyonRails5 速習実践ガイド」(通称)「現場Rails」を参考に進めていきました。
そのため、記事の内容には誤りがある可能性があることをご理解ください。
誤りがあればお手数ですが、ご指摘いただければと思います。よろしくお願いします。# 環境
Ruby 3.1.2
Rails 7.0.3.1# 問題のエラー
バリデーションが実行された後に、jsが機能しなくなってしまった。
![スクリーンショット 2022-08-21 23.01.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737125/d21d9acd-6b03-d61f-64d5-11b3a00428ae.png)
![スクリーンショット 2022-08-21 23.01.30.png](https://qiita-
WIP【Viewがレンダリングされるまでの技術とその理解 / Aaron Patterson 】Aaron PattersonさんがYouTubeで説明していたコードにビューを付けてみる
```
.
├── app
│ ├── controllers
│ │ ├── action_controller.rb
│ │ ├── application_controller.rb
│ │ └── users_controller.rb
│ └── views
│ └── users
│ ├── index.html.erb
│ └── new.html.erb
├── application.rb
├── rack_router.rb
└── server.rb
``````html
users#index
```
```html
users#new
```
```ruby
require 'socket'
require './application'port = 3000
server = TCPServer.open(port)loop d
ActiveRecord::Enum
## Enum is 何
- enumは``列挙型``## 定義例
``` ruby
class Book < ApplicationRecord enum sales_status: { reservation: 0, # 予約受付中 now_on_sale: 1, # 発売中 end_of_print: 2, # 販売終了 } end ``` #### 保存のされ方 - シンボル、文字列、数値を渡しても戻り値が"now_on_sale"と表現される ``` ruby irb(main):001:0> Book.create(sales_status: :now_on_sale)
=> #irb(main):002:0> Book.create(sales_status: "now_on_sale")
=> #irb(main):003:0> Book.create(sales_s
find/ find_by/whereの違い
## バージョン
- Ruby 2.6.6
- Rails 6.0.3## find/ find_by/whereの違い
### find
- 検索条件に引っかかる場合
``` ruby
pry(main)> Book.find_by(1)Book Load (0.2ms) SELECT `books`.* FROM `books` WHERE `books`.`id` = 1 LIMIT 1
=> #
``````ruby
pry(main)> Book.find(1).id ## データの中身を取得するとき
=> 1
```- 検索条件に引っかからない場合
- ``ActiveRecord::RecordNotFound``が発生
```ruby
pry(main)> Book.find(1000)
Book Load (0.
bundle install で `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/' と言われてうまくいかない
時間ないので、雑に忘備録として、一旦あげておきます
## 問題
```Gemfile
gem 'mysql2', '~> 0.5.3'
```こんな感じでGemfileに`mysql2`を入れようとしたときに
```
bin/bundle install
```
って入れても
```
An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling.In Gemfile:
mysql2
```
こんなエラーが出るわけですよね。書いてある通りに
```
gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/
```
と入れても
```
ld: library not found for -lssl
```
[Tips]insertメソッドでコールバックを発火させずに単一のレコードを作成する(Rails)
## コールバックを呼ばずにデータを作りたい
Railsでレコードを作成する時、コールバックを発火させずにデータを作成したい時が(基本的にない方がよいですが)ごく稀に存在します。
データを大量に作る時は、Rails6以降なら下記のように[insert_all](https://railsdoc.com/page/insert_all)を使うと良いでしょう。```ruby
Article.insert_all([
# created_at、updated_atが存在しrecord_timestampsをfalseにする場合、attributesの中に書いておく必要があるので注意
{ title: "How to use qiita", author_id: 1 },
{ title: "Why does elasticsearch use inverted index?", author_id: 2 }
])
```しかし、一つのレコードしか作らないのに`insert_all`を使うために配列を作るのは少々大仰な気がします。
## そこでinsertメソッド
【もうやらかさない】開発DBのデータを全部消しちゃったお話(改善策もあるよ)
## はじめに
どうも、もきおです。未経験から自社開発企業に入社して半年以上経ちましたがつい一週間前くらいに盛大にやらかしたのでその際のお話をしていきたいと思います。Slackでの会話
先輩「あれ?開発DBのデータ消えた・・・?」
メンバー「僕もDB見れなくなりました、、」
先輩「全部消えてるよね、、」この時ハンパない冷や汗をかいてました。心当たりがめちゃくちゃあったからです。
そう、開発DBのおそらく何千万というデータというデータを消してしまったのは紛れもなく自分でした。## なぜデータを消してしまったのか?
毎回テストを走らせるためにテスト用DBを作成しているのですが、テスト途中で止まってしまいそのまま進まないという事象が起きていました。
```ruby:
rails db:create Rails_ENV=test
rails db:migrate Rails_ENV=test
```
そのためmigrateが上手くできていないと感じ、一旦テストDBをリセットしようとしたら``test``を指定せず以下のコマンドを打ってしまい開発DBのデータを全てリセットしてしまった
The resource ファイル名 was preloaded using link preload but not used within a few seconds from the window's load event.
## はじめに
RubyonRailsでアプリを開発していた時にjsを用いて写真プレビュー機能の作成時に起こったエラーです。
今回は2つの解決法を使って解説しましたので自分に合った解決法が見つかれば幸いです。### 使用する環境
- MacOS(M1)
- Rails 6.1.4
- Ruby 2.6.3
- yarn 1.22.17
- Homebrew 3.5.0### エラー文
「The resource ファイル名 was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate `as` value and it is preloaded intentionally.」## 解決法1:特定のページでのフルリロードを実行する
Before
```application.html.erb
<%= javascript_pack_tag "application"
undefined method `permit' for "1":String に手こずった。
# はじめに
本記事はプログラミング初心者が、railsの学習を進めながら、躓いた部分、解決した箇所、またそれらの解決方法を備忘録も兼ねてまとめているものです。
最初はprogate。そのあと、「現場で使える RubyonRails5 速習実践ガイド」(通称)「現場Rails」を参考に進めていきました。
そのため、記事の内容には誤りがある可能性があることをご理解ください。
誤りがあればお手数ですが、ご指摘いただければと思います。よろしくお願いします。# 環境
Ruby 3.1.2
Rails 7.0.3.1```ruby:new.html.slim
- if @user.errors.present?
ul#error_explanation
- @user.errors.full_messages.each do |message|
li = message
dl
= form_with model: @user, url: '/users', local: true do |f|
.form-group
f.label 名前
初めてのウェブサービスに縦書きエディタを選んだ理由(2)
# 1.はじめに
55歳を過ぎてWebの勉強を始め、[縦書きエディタ](https://www.sakubun.tokyo)を開発した[前回の記事](https://qiita.com/tategaki3/items/14266860629892376d29)が、思いのほかよく読まれたので、勝手に続編を上げさせてもらいます。コーディングも開発も技術系記事の執筆もなにもかも手探り。おかしい面も多々あることかと思いますが、遠慮なくご指摘ください。# 2.縦書きにこだわる理由
さて前回、縦書きエディタを開発した理由にGIGAスクールが関係していると書きました。児童・生徒が学校で使うChromebookのGoogle系ツールに縦書き機能がなく、国語の先生が困っているという話です。Googleは欧米の企業なので、Googleドキュメントなどが横書きなのは自然なことです。問題は日本語が縦書きも横書きもOKなことです。日本で出版される小説や文庫本、新書などは縦書きが主流ですが、技術系の雑誌や本はほとんどが横書きです。縦書きの文化を担ってきた出版、雑誌、新聞などのマスコミ業界はいずれも斜