- 1. 【Rails】どちらか一方のデータ(カラム)のみを入力必須にするバリデーション
- 2. Rails7×Svelte でWebアプリ開発 part1 (環境設定、簡単な表示まで)
- 3. Dịch vụ đáo rút thẻ tín dụng Bình Thạnh
- 4. 【Ruby】+ と
- 5. 初めてのNext.js×Railsハンズオン
- 6. 【Rails7】importmap
- 7. 【2日目】フロントエンジニアがRailsを習得するまで
- 8. Rails6で、Webpacker::Manifest::MissingEntryErrorの解消
- 9. 【Rails】ミドルウェアでパスを見てDBを切り替える
- 10. 大規模 Rails で役立つテクニック: Iteratorパターン編
- 11. 【Ruby on Rails】モデルの関連付け(アソシエーション)をざっと理解してみる
- 12. 【Ruby】optparseの使い方
- 13. 初めてのRSpecで学んだこと No.2
- 14. 【超基本】RubyでのHTML記述方法
- 15. ActiveSupport::Inflectorでacronymを追加するときにはunderscoreメソッドへの影響にも注意が必要
- 16. Tips: Railsでポリモーフィック関連付けを使うときはインターフェースに依存した実装をするようにしよう
- 17. RailsでパスによってDBを切り替えれないか
- 18. 「OpenSSL::SSL::SSLError」について
- 19. Rails – NULLは許可するがブランク(空文字など)は禁止するバリデーション
- 20. Gem追加したときの「まずはinstallコマンド実行してね」を見ていく
【Rails】どちらか一方のデータ(カラム)のみを入力必須にするバリデーション
Railsアプリケーションの開発中、「2つのデータ(カラム)のうち、どちらか片方のみの入力でないと保存できない」というバリデーションを付与したい場面がありました。
この条件は、「携帯電話番号か(自宅などの)固定電話番号のうち、どちらか一方だけの入力が必須」といった場面でよく見かける/実装が必要になる、かと思われます。
そこで、本記事では「2つのデータ(カラム)のうち、どちらか一方のデータのみが入力されれば保存される」=「2つのデータ両方が入力された場合は保存されない」という、二者択一入力必須条件を付与するためのRailsでの実装手順をまとめました。
Railsアプリ内の機能に二者択一入力必須条件をつける解説をおこなうにあたって、「開発環境」と「具体的な記述内容」「実装のポイント」の3つをまとめました。
## 開発環境
| Category | Version |
| :—————–: | :—–: |
| Ruby | 3.
Rails7×Svelte でWebアプリ開発 part1 (環境設定、簡単な表示まで)
# はじめに
Svelte というフロントエンドフレームワークはご存じでしょうか?
Rails7からはTurboなどHotwireからJavaScriptを描かずともモダンなSPA風なページも作れるようにもなりましたね個人的にフロントエンドフレームワークとしてReactは好きですし、他にもVue.jsなどは有名ですね!
https://2022.stateofjs.com/ja-JP/libraries/front-end-frameworks/
そんなフロントエンドフレームワークの最近のトレンドを見てみると…
いろいろな分野で上位に来ている「Svelte」今回はこちらについて紹介とRailsと組み合わせてWebアプリを開発してみた記録を書かせていただきます
# Svelte についての紹介
https://svelte.jp/
– 読み方は「すべると」 みたいです
– コンパイラで仮想DOMは使用しない
– Reactなどは仮想DOMを使用している
– ビルド時にアプリの変更箇所を探す# Svelteを使ってRailsアプリを開発してみ
Dịch vụ đáo rút thẻ tín dụng Bình Thạnh
https://quatangchosuckhoe.net/rut-tien-the-tin-dung-quan-binh-thanh
Rút tiền thẻ tín dụng quận Bình Thạnh ngày nay đã trở nên phổ biến rất nhiều.Với hình thức rút tiền thẻ tín dụng quận Bình Thạnh mở rộng lại càng đem về lợi thế.
【Ruby】+ と<<で配列の要素を追加した時の話
https://qiita.com/advent-calendar/2023/infratop
シリーズ2の1日目です!卒業生とメンターさんがコラボして書いています📝
まずは、これを見てください。
“`rb:sample.rb
numbers = [1,2,3]
numbers += [4]p numbers # [1, 2, 3, 4]
“`“`rb:another_sample.rb
numbers = [1,2,3]
numbers << [4] p numbers # [1, 2, 3, 4] ``` 一見、配列に要素を追加しただけに見えます。 しかし、[Object#freeze](https://docs.ruby-lang.org/ja/latest/method/Object/i/freeze.html)を使ってみると以下のような違いが出てきます。 ```rb:freeze_sample.rb numbers = [1,2,3] numbers.freeze # numbers << [4] # can't modify frozen Ar
初めてのNext.js×Railsハンズオン
# はじめに
DMM WEBCAMP Advent Calendar 2023の1日目担当のみずたです、よろしくお願いします!🎁🎅🎄# 今回作るもの
CRUDのRとD(ReadとDestroy)のあるアプリをNext.jsとRailsを用いてハンズオン形式で作ります。CとU(CreateとUpdate)はぜひ自分で機能追加してみてください。
※解説すると長くなる部分は解説を省略するので、不明な部分はご自身で検索等をお願いしますmm
![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2729380/861dff7d-e870-d54c-3cea-5465b564fc6c.gif)ハンズオンの完成コード↓
https://github.com/mizuta61/frontend_sample
https://github.com/mizuta61/backend_sample# 記事対象者
– フロント(Next.js)とバック(Rails)を分け
【Rails7】importmap
# はじめに
【2日目】フロントエンジニアがRailsを習得するまで
# Railsチュートリアルを開始
# 1周目
1周目は読むだけで流れを掴んでいく。
また、Gitやデプロイ周りなどはスルーしていく。—
# 1章
https://railstutorial.jp/chapters/beginning?version=7.0#cha-beginning
以下の流れで学習を進めるらしい。
1. 始めは最小限のhelloアプリで各種セットアップを整える
1. 少しだけ機能が増えたtoyアプリを体験
1. 最後に本格的なWebアプリケーション『Sample App』を作成—
# 2章
## Model-View-Controller(MVC)
railsは大まかに以下のような構成で出来ている。
– app
– model : データベースとの通信を担当
– view: 見た目の部分を担当
– controller: リクエストを処理する担当> こんな感じ(railsチュートリアルより抜粋)
![image.png](https://qiita-image-store.s3.ap-northeas
Rails6で、Webpacker::Manifest::MissingEntryErrorの解消
railsで、Gemのdeviseを使う時に、起こりがちのエラー Webpacker::Manifest::MissingEntryErrorの解消について。
よく、いろんな記事に載っている、以下のコマンドを実行してもエラーが解消されない。
rails webpacker:install
rails webpacker:compilenodeのバージョンが20だったのですが、
14に下げることで治りました。使用できるバージョンは以下のコマンドで確認。
n ls-remote –all以下で、バージョンのダウングレードをする。
sudo n 14.0.0すると、治りました。
【Rails】ミドルウェアでパスを見てDBを切り替える
# 概要
つい昨日パスでアクセスするDBを変更する方法をまとめて書きましたhttps://qiita.com/yothio/items/84daecd154624cdd059e
結果的にcocernに共通処理として本来ControllerやModelが持つべき処理を切り出して、各々で読み込む対応をしましたが中身のないModelやControllerが大量に作成されることになりました
DBへ接続しに行くときのミドルウェアで接続先DBを変更できればめちゃいいじゃんと思いちょっと試してみました
サンプルコードはこちらです
https://github.com/yothio/rails_multi_db_test/tree/modify_database_for_middleware
## 実際にミドルウェアを書いて読み込ませる
アクセスがあったときのDBの切り替えは下記のように定義します
– /hoge/contentsでアクセスがあった場合
– defaultの設定を利用する(db名はkanban_development)
– /fuga/contentsでアクセスが
大規模 Rails で役立つテクニック: Iteratorパターン編
# はじめに
先日、LTイベント「Qiita Night~Rails~」にて登壇させていただきました。
https://increments.connpass.com/event/297116/
そこで、Railsで大規模Webアプリケーションを 開発するときに知っておきたいテクニックを Qiita の Rails を例にいくつか紹介しました。発表資料はこちらです。
アーカイブ動画もあります。
【Ruby】optparseの使い方
Rubyを学習する過程で使用した`optparse`の使い方を解説したいと思います。
本記事に間違った内容が含まれている場合、ご指摘いただけますと幸いです。## `optparse`とは
[公式リファレンス](https://docs.ruby-lang.org/ja/latest/library/optparse.html)を見ていただければわかりますが、要するに**コマンド実行時のオプションを自分で作るためのライブラリ**です。
オプションというのは、コマンドを実行するときにその後に`-`や`–`をつけて指定できるものです。
たとえばGitの`branch`コマンドでは、以下のように`-d`(`–delete`)オプションの後にブランチ名を指定することでそのブランチを削除できます。`-d`がショートオプション、`–delete`がロングオプションです。
“`
git branch -d ブランチ名
git branch –delete ブランチ名
“`上の例ではオプションのあとにブランチ名を指定していますが、これは引数となるものです。引数は省略できる場合もありま
初めてのRSpecで学んだこと No.2
## バージョン
– ruby 3.2.2
– Rails 6.1.7.6
————————-## タスク管理アプリでの、タスクが降順に並んでいるかをRSpecでテストする
タスク管理アプリにて、投稿したタスクを降順に並べ、降順に並んでいるかをテストするために、「最新のタスクが一番上に表示される」、ということを確認するためのコードを書いたが、その時に学んだことを備忘録として残しておく。
“`spec/factories/tasks.rb
FactoryBot.define do
factory :task do
name { ‘パパ’ }
content { ‘日曜日歯医者’ }
end
end
“`“`spec/system/task.rb
RSpec.describe ‘タスク管理機能’, type: :system do
describe ‘新規作成機能’ do
context ‘タスクが作成日時の降順に並んでいる場合’ do
it ‘新しいタスクが一番上に表示される’ do
【超基本】RubyでのHTML記述方法
## はじめに
この記事は、プログラミング学習を始めたての方、
特にRuby on Railsを独学やスクールで書いているが、
**「ビューファイルの構造や書き方がいまいちわからない」**
という方向けの記事です。基本的な内容だけを扱うので、初心者の方向けの記事になります。
例えば、
– html.rubyファイルと普通のrubyファイルやhtmlファイルの違い
– “` <% %> “` と “`<%= %>“` の違いなどを述べます。
私自身もまだまだ初心者なので、この記事に間違いがあればご指摘いただけると幸いです。
## 記事を書こうと思った背景
この記事を書こうと思った背景は、
私自身、スクールに通っていたときに教材をコピペして勉强していて、
rubyとhtmlが一体となったビューファイルの仕組みや書き方がよくわかっていなかった経験があるからです。この記事が、同じ状況の方の理解の助けになれば良いなという思いで記事を書きました。
## HTMLとは
HTMLとは、簡単に言うとWEBページを作成するためのマークアップ言語です。
マークアップ言語であっ
ActiveSupport::Inflectorでacronymを追加するときにはunderscoreメソッドへの影響にも注意が必要
Railsで、以下のように acronym (略語) を追加することがあります。
“`rb
ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.acronym ‘HTTP’
end
“`主に、定数名で使ったり、`humanize`で使ったりしたいときに設定すると思います。
今回、オートローダーを変更する際に、定数の検索方法が変わるということで、acronymを追加するかどうか、その影響を調査している際に当たりました。https://railsguides.jp/classic_to_zeitwerk_howto.html#%E7%95%A5%E8%AA%9E%E3%81%AE%E6%89%B1%E3%81%84
## acronym を登録したとき
API documentに書いてありましたので、引用します。
https://api.rubyonrails.org/classes/ActiveSupport/Inflector/Inflections.html#method-i-acron
Tips: Railsでポリモーフィック関連付けを使うときはインターフェースに依存した実装をするようにしよう
## この記事は何
Railsにはポリモーフィック関連付けという機能があります。https://railsguides.jp/association_basics.html#%E3%83%9D%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E9%96%A2%E9%80%A3%E4%BB%98%E3%81%91
この機能は使い方によっては便利な一方、依存を複雑化させる原因にもなりうるものです。
この記事では、ポリモーフィック関連を使うときにやりがちな「特定のモデルへの依存」を避けるテクニックをご紹介します。ポリモーフィック関連の具体的な使い方はドキュメントや、以下の記事などをご参考ください。
https://qiita.com/sazumy/items/726e7097c6ca4a9ca6e3
https://qiita.com/itkrt2y/items/32ad1512fce1bf90c20b
## ポリモーフィック関連を使っている時に起こること
ポリモーフィック関連を使っていると、特定の
RailsでパスによってDBを切り替えれないか
# 概要
Rails6からマルチデータベースを利用できるようになりました
リードレプリカ構成で負荷をうまく分散させたり、取得するモデル単位でデータベースのコネクションを切り替えることができるようになりました同一のモデルを取得するけれど、パスによって取得するDBを切り替えることを試したので書き残します
今回試した内容の結論から書くと「**concernで無理やり解決した**」となります
## どうやってDBを切り替えるのか
切り替えたいモデルが継承している抽象クラスに`connects_to database`を記述すれば切り替えができます下記のような切り替えたいモデルとして`Card`があったとき、それが継承している`ApplicationRecord`に対して
writingのDBとreadingのDBを指定すると、必要に応じて切り替わります
“`ruby:app/models/card.rb
class Card < ApplicationRecord end ``` ```ruby:app/models/application_record.rb class A
「OpenSSL::SSL::SSLError」について
### 【概要】
—
API通信中にSSL証明の認可にて、処理が弾かれてしまったので、今回fixした方法を備忘として記しておきます。### 【環境】
—
・Rails
・Docker
・DeepL### 【原因】
—
`DeepL`の導入後、標記の事象が発生しました。
ポイントとしては、SSL通信を行う設定にdocker側が対応していなかったことや、SSL通信するなどの事象が考えられます。なお、通常のSSL通信では下記のようにセキュリティの情報を担保されていることを確認できるようになっております。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538926/5b6045ad-bb54-c5d2-b565-7b67b1249335.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538926/d3484b5f-a3e3-13f2-7b33-ad0c6e
Rails – NULLは許可するがブランク(空文字など)は禁止するバリデーション
# 例
– presence 指定でブランクを禁止する
– ただし allow_nil で値が nil の場合はバリデーションをスキップする“`rb
validates :foo_attribute, presence: true, allow_nil: true
“`# チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ
Gem追加したときの「まずはinstallコマンド実行してね」を見ていく
# 概要
Gemのファーストコミットをするタイミングがあり、既存のGemでは「初期設定コマンド実行してね。みたいなのがあるけれどどうやってやるのか」と見ていて、少しまとめたので書いておきますほとんどが [Railsガイド](https://railsguides.jp/v7.1/generators.html) に書いてある内容なため、初心者向けの記事となっています :pray:
## generate initializer
> 「初期設定コマンド実行してね。みたいなのがあるけれど…
これはアプリケーションにGemを追加したときに初期設定をアプリケーション側に記載する場合、Gem側からジェネレーターが提供されていることがありますここでは認証のgemとして使用する `devise` を例に取って確認してみます
### deviseの例
deviseのREADMEに書いてある通り下記のコマンドでdeviseの初期設定を行うと`config/initializers`配下に`devise.rb`が作成されます“`sh
$ rails generate devise:i