コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Rails

『Rails Developers Beer Bash 〜Railsのトレンドとこれから〜』に行ってきたよメモ

Unite2019Tokyoを早めに切り上げて勉強会はしご、本業のほうのRailsの勉強会である、Rails Developers Beer Bash 〜Railsのトレンドとこれから〜 に行ってきたよメモ 各発表の感想 2週間でRails5.1 > Rails6 タイムアタックチャレンジ 資料でっす #railsbeer…

Railsの5.2系からブロックなしのtravel_toに対してtravel_backを明示的に書かなくてもよくなった

travel_backってどこで使うんだ…?と使い所に関して挙動を確認してたらたどり着いたメモ。 環境 $ bin/rails -v Rails 5.2.2 理由と解説 travel_back というリアル時刻に戻す機能があるのだが、一昔の前のブログをさがすと「ブロックなしの travel_to をした…

Railsにてモデルの内容を人間の読める形式に変換する human 系の処理

あ、これi18nなのねという感じ。 環境 $ bin/rails -v Rails 5.2.2 概要 i18nに沿って、設定したlocaleに対応するモデル情報を表示する やり方 対応する情報を設定する i18nの形式で情報をymlに書き込む。日本語情報を作りたい場合は config/locales/ja.yml …

Rails.env はどうやって導きだされるのかざっくり調べる

該当コードを調べてみるシリーズ 環境 $ bin/rails -v Rails 5.2.2 該当コード rails/railties/lib/rails.rbのここらへん # Returns the current Rails environment. # # Rails.env # => "development" # Rails.env.development? # => true # Rails.env.prod…

ActiveSupportにはdate型に対してその日の範囲を作るall_dayというメソッドがある

前にまとめたけど、こんなんのもあるのかというメモ 環境 $ bin/rails --version Rails 5.2.2 やり方 all_dayメソッドを使うだけ date = "2019-08-17".to_date # => Sat, 17 Aug 2019 date.all_day # => Sat, 17 Aug 2019 00:00:00 UTC +00:00..Sat, 17 Aug …

Railsで with_indifferent_access を使うときは一呼吸おいて考えて欲しい

ただのコラム (この話を題材にする)環境 $ bin/rails -v Rails 5.2.2 with_indifferent_accessというメソッド Hashの拡張機能としてAvtiveSupportが用意しているメソッド rails/hash_with_indifferent_access.rb at master · rails/rails · GitHub Hashの…

ActiveRecordなどのoption類で複数の対象に同一のものをつけたいときはwith_optionsというものがある

こういうまとめかたもあるとは知らなかったのでメモ、原理は参考リンク参照 環境 $ bin/rails -v Rails 5.2.2 やり方 with_options で囲む 例 下記のようなモデルがあったとする # == Schema Information # # Table name: messages # # id :bigint(8) not nu…

RailsのActiveRecordのhas_manyにはorderで順番の指定できる

え、こんなコトできるの?っていうやつ。 環境 $ bin/rails -v Rails 5.2.2 やり方 has_manyのあとにorderをあしらう has_many :対象モデル, -> { order("order by のあとのSQL文章") } 例 今回のモデル # == Schema Information # # Table name: users # # …

Railsのenvでステージング用の値は増やせるがあんまり増やさない方がいいという話

ただの雑記です。 Railsの環境(env) 通常用意されているenvは 開発環境向けの development テストコードを走らせるための test 本番環境用の production がデフォルトで用意されている。 主には 開発/テストの用途でしか使わないgemの使い分け 再起動の簡略…

FactoryBotのtraitでリレーション先のModelのtraitを使って設定することができる

他のクラスのtraitって使えるんだネタ 環境 factory_bot (5.0.2) activesupport (>= 4.2.0) factory_bot_rails (5.0.2) factory_bot (~> 5.0.2) railties (>= 4.2.0) 使い方 関連のあるモデルに 例 userとhas_manyの関係にあるmessagesがあるとする。そのと…

Railsにおける未保存状態のリレーションモデルのつくりかた

リレーションするモデルも一気に保存したい、という場合の逆引きマニュアル的なもの 環境 $ bin/rails -v Rails 5.2.2 やり方 has_many の場合と has_one で書き方が違う has_manyの場合 {{has_manyをつけたモデルのインスタンス}}.{{belongs_toのモデル名の…

Railsでいずれかの値が入っていたらその値を代入する、などの処理をするときはpresenceが便利

先日の代入記事の発展編 環境 rails (5.2.2) activesupport (= 5.2.2) presenceとは presenceメソッドは、present?がtrueの場合は自身のレシーバを返し、falseの場合はnilを返します。 - Active Support コア拡張機能 - Rails ガイド - presence 使い方 valu…

RailsのActiveSupport::TimeWithZoneシリーズの利用シーンと対応メソッドをざっくりまとめる

Railsで現在時間を扱うときは設定したタイムゾーンを意識してほしいので Time.zone.now を使う、というのは割と染みて覚えるが他のケースを忘れがちなので一覧的に書いてみる 環境 $ bin/rails -v Rails 5.2.2 逆引き利用シーン 利用シーン メソッド 例 現在…

RailsのActiveRecoedのサニタイズ系のメソッドは5.2からpublicになっている

5.0と5.2を行き来していたのでてっきりprivateだと思ってたのでメモ ネタ元 週刊Railsウォッチ(20180813)Rails 5.2.1リリース、sanitize_sql_arrayは5.2からpublicだった、Dev.toがRailsアプリのソースを公開ほか 書き方 5.2 ActiveRecord::Base.sanitize_…

ActiveRecordのカラム要素の情報はハッシュ的な書き方でもアクセスできる

深くは調べてないがトリビア的なメモ 環境 $ bin/rails -v Rails 5.2.2 実例 下記のように取れる場合 user = User.last # => #<User id: 15, name: "Sato", created_at: "2019-05-28 05:03:20", updated_at: "2019-05-27 05:03:20"> 下記のようにアクセスできる。 user[:name] #=> "Sato" user["name"] #=> "Sato" もちろん代入すると保存される user["name"] = </user>…

ActiveModel::Attributesはプレーンな値を持つだけのオブジェクトを作るときに値をよしなに処理してくれるので便利

型が欲しい!!!とか思ったときそっと添えることのできる機能として 環境 $ bin/rails -v Rails 5.2.2 例 class NoRecordUser include ActiveModel::Model include ActiveModel::Attributes attribute :name, :string attribute :age, :integer attribute :…

Railsで公につかっていいAPIかどうかは RailsのRdoc を見るとよさそう

自分のためのメモ 当該サイト Ruby on Rails API このサイトにあるものは API ドキュメント作成ガイドライン - Rails ガイド で紹介されているがRdocで生成されるドキュメントファイル。こちらもOSSとしてメンテナンスされているものである。 知ったきっかけ…

Railsのroutesはスクリプトを書いて凝った記述でフィルタリングすることができる

へー、こんな書き方ができるんだというメモ 環境 $ bin/rails -v Rails 5.2.2.1 やり方 ※Rails のルーティング - Rails ガイド より引用 routes.rbには以下のように書く Rails.application.routes.draw do get '*path', to: 'blacklist#index', constraints:…

Railsにおける数値のto_sバリエーションをざっとまとめる

いろいろあるけど項目ごとにざっと見れるやつってあまりないので書いてみる 環境 $ bin/rails -v Rails 5.2.2.1 種類 電話番号 1234567890.to_s(:phone) #=> "123-456-7890" (当たり前だけど)0始まりは数値だと許容しないからできない 0123456789.to_s(:phon…

RailsでのRSpec実行時乱数の状態を実行毎に変わらないように固定する

RSpecでsampleするとコケるんだけど特定しづらい…みたいな奴を解消する。 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] $ bin/rails --version Rails 5.2.2 $ bundle exec rspec --version RSpec 3.8 - rspec-core 3.8.0 - r…

RailsでCrossOriginの設定をする場合は rack-cors のgemを入れればすぐ終わる

APIモードで作らなかったので、異なるドメインからアクセスされるAPIをやるために Access-Control-Allow-Origin とか設定せねば…とか思ったらすんなりできたのでメモ 環境 $ bin/rails --version Rails 5.2.2.1 使うgem cyu/rack-cors: Rack Middleware for …

RailsでIDを指定したリソースに対して、更に持つリソースを持つ情報を別コントローラーに割り当てるときのroutes.rbの書き方

あれ、どうやるんだっけ?というときのメモ 環境 $ bin/rails --version Rails 5.2.2.1 例 例えばユーザID100が所持する本が欲しい場合、以下のURLが思いつく https://example.com/users/100/books みたいな場合 resources :users do get ":id/books" => "us…

ActiveRecordで保存前の値を取りたいときはカラム名_before_last_saveというものがある

ActiveRecordのDirty系小ネタ 環境 $ bin/rails -v Rails 5.2.2 使い方例 今回はUserにnameというカラムがあるという形の例で説明 ActiveRecordでオブジェクトを作る、この時点ではsaveされてないのでnil。 u = User.new(name:"Taro") #=> #<User id: nil, name: "Taro", created_at: nil, updated_at: nil> u.name # => "Ta</user>…

『Rails Developers Meetup 2019』に行ってきたよメモ

Rails Developers Meetup 2019 に行ってきたました、ので見れたものと理解できたものだけスライドとあわせて備忘的な感想メモです。 ※各発表のスライドは随時公式HPに上がってます 1日目 アプリケーションを作るときに考える25のこと スライド公開しました h…

RailsでフォームからじゃないPOSTリクエスト時にrenderしてみる

特異な要望を頂いたのでRailsというフレームワーク的に対応しているかの実証実験メモ。 大前提 こんな実装はおすすめできないので、素直にHTMLを表示するだけならGETリクエストを使うようにしてください…。 環境 $ bin/rails -v Rails 5.2.2 検証 Controller…

Railsの複数形、単数形のルールを知りたい場合はrails/activesupport/lib/active_support/inflections.rb を見ると良い

Modelは複数形に、みたいな情報のベース定義。 環境 $ bin/rails -v Rails 5.2.2 前提 Railsの単数形、複数形、例外は登録することができる。 inflect.pluralは複数形への変換を定義 inflect.singularは単数形への変換を定義 inflect.irregularは単数形と複…

RSpecでRailsのroute.rbに書いたredirectを検証する

書き方よくわからんと思ったのでメモ 環境 $ bundle exec rspec --version RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-support 3.8.0 やり方 request specで expect(response).to redirect_…

RSpec内でcontrollerを定義して、concernのメソッドをテストする

俗に言うAnonymousControllerという手法です。 環境 $ bundle exec rspec --version RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-support 3.8.0 書き方 下記のようなconcernがあったとする m…

RailsでRSpecの実行時引数を.rspecに書いてRSpecの実行を便利にする

require忘れて時間を取られるみたいなことが多々あるので、.rspecを活用するときのメモ 環境 $ bundle exec rspec -v RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-support 3.8.0 使い方 設置…

Railsのerbで使われる記号の意味

意外とパターンすくないのでまとめてみた 記号別意味(パーセント/だいなり/しょうなりの表記は省略) <% %>(パーセントのみ) 出力が伴わないがRubyのコードとして操作したいときに使う。 if文で処理を分岐させる場合などに使う <% if @show_text == true …