rails
環境 Rails 7.x やりたいこと 全角カタカナのみを受け付けるバリデーションを実装したい。個人情報入力フォームの「ヤマダタロウ」みたいな。 コード class User < ApplicationRecord validates :name, format: { with: /\A[\p{katakana}ー-]+\z/, message:…
環境 Rails 7 Ruby 3.3 概要 例えば以下のように配列に対してmapで全要素に対して特定の処理を行いたかったとする。 def check(x) # 例えば3秒かかるとする sleep 3 x.even? end a = [1, 2, 3] results = a.map do |x| check(x) end p results ただこれだと…
環境 Rails 7 やりたいこと 以下のようなテーブルがある usersテーブル id name age postsテーブル id title user_id なんらか理由があって find_by_sql で実装するとする sql = <<~SQL.squish SELECT posts.title, users.name FROM posts JOIN users ON pos…
環境 Rails 7 やりたいこと Railsで秒以下を切り捨てたい 3分45秒 > 3分 2分1秒 > 2分 6分0秒 > 6分 コード 四捨五入とかじゃなければすごい楽だった def truncate_seconds(datetime) datetime.change(sec: 0, usec: 0) end
今まで以下のように書いてたんだけど、これだと必ずしも想定していたバリデーションエラーによってテストが成功していたとは言えなかった。 expect(post).not_to be_valid バリデーションエラーをRspecで完全一致でテストする場合は以下 expect(post.errors.…
環境 Rails 7.1 やりたいこと Railsの ActiveModel::Attributesは本当に便利で ActiveRecordでもDBに紐づかないモデルのActiveModelでも重宝している ActiveModel::Attributes が最高すぎるんだよな。 #Rails - Qiita ただ標準で用意されている型の種類が少…
環境 Rails7 やりたいこと Railsのモデルバリエーションで、カラムAがtrueのときにカラムBとカラムCは入力必須とするバリデーションを実装したい コード ifオプションやwith_optionsメソッドを使う class Model < ApplicationRecord # カラムAがtrueの場合の…
環境 Rails 7 やりたいこと RailsのAction Mailerでメール送信を1行でサクッと送信したい コード ActionMailer::Base.mail(from: "sender@example.com", to: "recipient@example.com", subject: "Hello", body: "This is a test email").deliver_now このコ…
環境 Rails 7 MySQL やりたいこと 例えばRailsのUsersモデルで10件レコードを取得し、emailが"hoge@example.com"のレコードを先頭にしたいみたいな状況 この場合はRubyで並び替えてもいいが、MySQLのORDER BYで特定のレコードのみを先頭にすることができる。…
CookieのSameSite属性とは CookieのSameSite属性は、Webサイトのセキュリティを向上させるために導入された機能です。 SameSite属性を指定することで、Cookieがどのような場合に送信されるかを制御することができます。 SameSite属性には、以下の3つの値があ…
やりたいこと Railsを使用して、user-agentからPCかスマホかを判断したり、OSやデバイス名を抽出したいと思っています。しかし、これらを自分で実装するのは手間がかかります。 そこで、「rack-user_agent」というライブラリを使用してみました。 k0kubun/ra…
環境 Rails 7 Railsのモデルディレクトリ荒れる問題 Railsはデフォルトだとapp/modelsにモデルファイルを生成する。 それはルールなので別にいいのだが、プロジェクトが成長するに従って10ならいいが50を超えてくるとかなりキツくなる。 そこでディレクトリ…
環境 Rails 6 やりたいこと Railsでは 1対多 とか 多対多 の関係のときに親レコードを削除したときにそれに紐づく子レコードも一緒に削除することができる。方法は簡単で has_many(has_one)にdependent: :destroyを追加するだけ ここで以下のようなparent>ch…
環境 Rails 5以降 経緯 そもそもRaw post dataとはなんぞや、から。 RailsでRequest Specを書く場合、当然POSTメソッドのテストも書くケースがある。 そんなときはこんな感じになると思う。 # spec/requests/logins_spec.rb require "rails_helper" RSpec.de…
環境 Rails 5.x 6でも同じ 4は知らん ruby 2.x 手順 早速やっていく ここでは localのRedisサーバーにSidekiqを使う 混合しがちだが、SidekiqのWorkerは使わずRailsのActiveJobでJobを走らせる。 Gemfileに以下を追加 gem "sidekiq" gem 'redis-namespace' …
環境 Rails 5.2 経緯 Railsで生涯費用シミュレーターというのを作っていた。 で、form_withで作ったフォームの中にラジオボタンを作りたかったのだが、これがなかなかうまくできない 先にゴールの生成されるべきHTMLを示す。 <input type="radio" value="month" checked="checked" name="cost[pay_type]" id="cost_pay_type_month"> <label for="cost_pay_type_month">月額払い</label> ラジオボタンは地味に…
データベースに記述する そもそもRails側でやらなくても、データベースにデフォルト値をセットする機能が備わっているのでそっちを使う。 マイグレーションで書くとこんな感じ create_table :posts do |t| t.string :name, default: "nanashi" t.timestamps …
背景 Railsのテストには外せないライブラリと言っても過言ではないテストデータの生成管理用ライブラリことthoughtbot/factory_bot しかし、あるテストでいつもどおりにモデルのテストデータを書いてたらエラーになった。 FactoryBot.define do factory :hog…
結論 テストすべきロジックはモデルとかに書くべきで、直接Rakeタスクをてすとしなきゃいけないってことは何かがおかしい が、一応メモ 環境 Rails 5.2 コード 先に全部ロードしておく RSpec.configure do |config| config.before(:suite) do Rails.applicat…
環境 Rails 5 やりたいこと 普通のログに吐くだけなら Rails.logger.info("メッセージ") で可能だが、先頭に日付のフォーマットが入ってしまったりしてしまう I, [2019-08-18T02:07:34.381971 #4116] INFO -- : Processing by VideosController#random as HT…
環境 Rails 5.2 Rspec 3.8 背景 Rspecのテストで、今まではController specsだったが、今ではRequest specsが推奨となっている。 request spec - Request specs - RSpec Rails - RSpec - Relish いわゆる type: :request というやつ で、Request specsでHead…
眠いのでめもだけで許して Resource temporarily unavailable with default unix socket configuration · Issue #1449 · puma/puma
環境 Rails 5.2 やりたいこと RailsのMySQLでMyISAMを使いたい。が、指定しないとInnoDBになってしまう。RailsだとマイグレーションスキーマのCreate tableに毎回書かなきゃいけなくて面倒。 かといってMySQL側でデフォルトでセットしようにも [mysqld] defa…
動機 Rails5.2以降では秘匿情報はCredentialsで管理することが推奨されている。rails secrets:xxxxなんでなかったんや Rails 5.2の新機能Credentialsでパスワード等を管理する - 動かざることバグの如し で、結構 rails credentials:edit することが多いんだ…
RubyKaigi 2019のスライドでちょっと話に出てたので初めて知った 試してみる Falconとは Railsに使うミドルウェアといえば、Unicorn、Pumaあたりが有名だが、falconはわりと新興である。 速さの秘訣は Unicorn マルチプロセスで(Webrickよりかは)速い Puma…
環境 rails 5.2 やりたいこと RSpecでいろいろテストを書いているのだが、日時が絡むテストが非常に面倒である。例えば一定時間経つと挙動が変わるとか、〜年より前、後で振る舞いが変わるテスト、など。 が、さすがRails、travel_toというヘルパーメソッド…
環境 Rails 4、5 やりたいこと railsのtasksからActionViewを参照してHTMLを生成(render)して出力したい ここでいうrenderがややこしいのだが、よくControllerの中で使っているrender json: {key: 1}などとは違う もっと言うと普段使っているrenderの内部…
この記事はRuby on Rails Advent Calendar 2018の7日目です。 はじめに 今回は知らなくても生きていけるけど、知っておいたほうがお得で便利なRailsメソッドを紹介していく。RailsといいつつActiveSupportやんけ squish 冒頭と末尾のホワイトスペースを削除…
環境 rails 5.x やりたいこと ActionMailerを使ったメール送信周りのテストをしていて、 # メール1通送れているか expect(ActionMailer::Base.deliveries.size).to eq(1) mail = ActionMailer::Base.deliveries.last expect(mail.subject).to eq("たいとる"…
Honokaというじゅりあん(@MITLicense)氏作のBootstrapテーマがある。 Honoka - 日本語も美しく表示できるBootstrapテーマ サンプルを見てもらうとわかるが、日本語の表示が綺麗になっている。加えて配色も標準と変わってて、Bootstrapの触り心地をキープしつ…