Ruby
すごい抽象的なタイトルだが実際困った事があったのでメモ 例 例えば拡張現実(Augmented Reality)のモデルを表現するクラスを作るとする。そうするときにar_model.rbというファイル名で、中身を以下のように書く。 class ARModel include ActiveModel::Mod…
「引数にActiveRecordを渡したいが、そこから操作されてほしくない」というようなときにどういうアプローチがあるかが気になったので、ざっくりまとめ。 検証した環境 $ bin/rails -v Rails 7.1.2 $ ruby -v ruby 3.2.1 (2023-02-08 revision 31819e82c8) [a…
pluck(:id) を使っていたのでメモ程度に。 動作環境 $ bin/rails -v Rails 7.1.2 実例 Authorというモデルがあった場合、以下のように取得できる Author.ids # => [1, 2, 3] Author Ids (0.6ms) SELECT `authors`.`id` FROM `authors` # => Array こちらはMo…
再代入を回避させ、1回の記述で代入をさせるための記述を整理として 環境 検証したバージョン $ ruby -v ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c5) [arm64-darwin22] リファレンスマニュアルより if 式は、条件が成立した節(あるいは else 節)の最後…
N:Nの関連性のレコードをサッとつくるためのtraitを作りたい場合のtips 環境 Gemfile.lockは以下のような環境 factory_bot (6.4.4) activesupport (>= 5.0.0) factory_bot_rails (6.4.2) factory_bot (~> 6.4) railties (>= 5.0.0) 使い方 factory_botでは一…
あんまり書く機会がないのでメモ 環境 ruby -v ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [arm64-darwin22] 構文 公式ドキュメント曰く {{式1}} rescue {{式2}} の形式で書くことができ、以下と同義になる begin {{式1}} resuce {{式2}} end 公式ドキ…
表題の通り。ドキュメントにわかりやすく記載がないので、各記述をよりあつめた話をドキュメントをもとにまとめる。 調査したバージョン $ rbenv -v rbenv 1.2.0-59-g0704e65 rbenvが利用するRubyのバージョンを決めるのはどの情報をもって決めるのか まずは…
当たり前なんですけど、部分的に切り取ると違和感があるので言葉でまとめる 環境 config (4.2.1) gemそのもののリポジトリは以下 rubyconfig/config: Easiest way to add multi-environment yaml settings to Rails, Sinatra, Pandrino and other Ruby proje…
Rails上で render status: :not_found とかやっているが、この :not_found と 404 はどこなのか、という小ネタ。 確認した環境 $ bin/rails -v Rails 7.0.6 Railsのステータスコードのシンボル 一覧はRailsガイドにある。 レイアウトとレンダリング-2.2.13.4…
Railsでparamsの値を処理するときによく使われるので、どういうものがあるかを一覧で整理する 参考元 class NilClass (Ruby 3.2 リファレンスマニュアル) 一覧 メソッド名 変換されるクラス 変換後の値 to_i Integer 0 to_s String "" (空文字) to_a Array […
当たり前といえば当たり前の小ネタ 環境 $ rails -v Rails 7.0.6 $ ruby -v ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c5) [arm64-darwin22] そもそもmergeとは hashのmergeメソッドは2つのハッシュを1つにまとめ、同じキー名のものをマージする。例えば…
日頃のコードレビューの言語化です。 前提 Ruby on Railsのバージョンとしては6ぐらいを想定しています viewの記述にはerbを想定しております。 よくあるケース 例えば下記のようなテーブル構成をしているModelがあるとする create_table "users", force: :c…
知らなかったので備忘まで。ただし万能ではないので用法用量を守って正しくお使いください。 環境 $ rails -v Rails 7.0.6 $ ruby -v ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c5) [arm64-darwin22] どういうものか Railsコンソールには --sandbox とい…
ハッシュを用いたキーワード引数(アスタリスクを二重につける記法のもの)を使ってしまうことによるデメリットと代替案に関してまとめます。 今回扱うケースとRubyのバージョン 一息おいて考えてほしいケースのサンプルコードは以下 def put_english_text(*…
いまいちちゃんと理解していなかったので改めてまとめる 大前提としての値渡し、参照渡し プログラミング言語の引数の渡り方の話で出てくるフレーズなので説明としては簡素に記述するが 値渡しは呼び出し元の実数値(実引数の値)を呼び出した関数の引数(仮引…
知らなかった仕様 検証した環境 $ ruby -v ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-darwin19] 出典 例外を発生させます。第一の形式(引用注:raise のみの記述のこと)では直前の例外を再発生させます。 - 制御構造 (Ruby 3.1 リファレンス…
そもそもRDocの:nodoc:とは Rubyに標準的に備わっているドキュメント生成のライブラリRDocには:nodoc:というオプションがある。これはどういうものかはドキュメントに記載がある。 指定した要素をドキュメントに含めません。 - library rdoc (Ruby 3.1 リフ…
このエントリはRubyのAdventCalendar2021の13日目の記事です。 書き方として割と見かける事が多いので、こういう使い方もできるよという知識の一つとしてご紹介します。 環境 $ ruby -v ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-darwin19] …
パースエラーになる、のでワークアラウンド的な対策 環境 $ ruby -v ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-darwin19] やりたいこと 正常に変換できるケース 例えば以下のような test1.tsv があるとする(タブはHTMLの表現上うまく出ないの…
あんまり直球な情報がないのでメモがてら 環境 $ ruby -v ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin19] やり方 URLからハッシュ化 target_url_with_query = "https://example.com?equal_string=ZXhhbXBsZXNleG1hcGxlcw%3D%3D&exa…
要因がわかれば自明だけどわかりづらい、自分の引いたバッドノウハウのメモ。 環境 ruby -v ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-darwin19] どういうことか headerの文字列一致は空白も含めて行われる、そしてheaderの文字列が存在しな…
エイリアスかと思ったら違うのでちゃんと記述する 環境 $ ruby -v ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-darwin19] 概要 生成されたインスタンスのクラスを調べたいときは instance_of? を使う。継承元のクラスも含めて調べたいときは ki…
エクスクラメーションマークの重ねがけ、二重のビックリマークなど、読み方が難しいやつ 環境 $ ruby -v ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-linux] 効能 明確に true か false にしたいシーンがあるときに ! をかけてtrueかfalseにしてか…
Railsだけど、自分の体験した辛さを言語化するシリーズ 要約 messages.first.title とかやるとコケるので、ちゃんとこういうことを考慮した作りにして欲しい。 遭遇した事象 Railsのview上に以下のようなコードがあった <div class="title"> <div id="notifce_message">『<%= @messages.first.title %>』が</div></div>…
ゼロ埋め、いわゆるゼロパディングに関してこういう書きかたがあるとはあんまり知らなかったのでメモ 環境 $ ruby -v ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin17] 使い方 以下のように時間を設定する t = Time.new(2001,2,3,4,…
ほう、こんなものが…という既存プロジェクトに入ってたgemをメモるシリーズ 出典 GitHub - zmbacker/enum_help: Help ActiveRecord::Enum feature to work fine with I18n and simple_form. 環境 rails (5.0.2) enum_help (0.0.17) 効能 gemを入れたら confi…
かの onkcop には以下のような設定がある # * 式展開したい場合に書き換えるのが面倒 # * 文章ではダブルクォートよりもシングルクォートの方が頻出する # ことから EnforcedStyle: double_quotes 推奨 Style/StringLiterals: EnforcedStyle: double_quotes …
当たり前の話だが忘れてた マニュアル曰く モジュールを定義します。モジュール名はアルファベットの大文字で始まる識別子です。- クラス/メソッドの定義 - モジュール定義 (Ruby 2.6.0) ありがちな話 Railsにて /tokusyu/201912/special みたいなことを素…
wheneverの独特の書き方の元ネタ gem mojombo/chronic: Chronic is a pure Ruby natural language date parser. できること ActiveSupportとはひと味違った形で表現ができる。 基本は Chronic のクラスメソッド parse をつかってTimeクラスを生成する。 例え…
雑なメモ やり方 基本のやりかた gitで書くときには以下のように書ける。 gem "rails", :git => "https://github.com/rails/rails.git" branchを加えるやり方 gem "rails", :git => "https://github.com/rails/rails.git", :branch => "6-0-stable" 補足 い…