コード日進月歩

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

Rails

Railsのmigrationでカラムコメントをつけたいときは comment で記述できる

Railsだとmigrateファイルあるからいらんって言われがちだけどつけたいよね、っていうメモ 環境 rails (5.0.2) やり方 カラム指定時に comment: "書きたいコメント" をつければOK 例 class AddColumnHogeHoge < ActiveRecord::Migration[5.0] def change add…

Dockerを使って手元の環境にRubyやRailsを入れずにrails newした結果を手に入れる

パーフェクトRails読んでたら「まずはDockerイメージを作成する前に、サンプル用のRails アプリケーションを作成しましょう」と出てきたので、それすらも俺はDocker出やりたいんだ!と思ったので頑張ってみた 前提 dockerは使えるが、ローカルのrubyのバージ…

RubyのテンプレートエンジンSlim内でJavaScriptを直接記述し、scriptタグに属性をつける場合の書き方

たまに広告用のタグとかもらったときに書き方忘れているのでメモ。PHPの軽量フレームワークではないです。 環境 slim-template/slimの下記バージョン slim (3.0.9) やり方 属性がいらない場合 javascript: のショートカットが使える javascript: alert('Slim…

RailsのMigrationで reffrenceの too_longを解消する書き方

refferenceの場合、indexが生成されるが自動生成のindex名が長くなってしまう場合の解消例 環境 bin/rails -v Rails 5.0.2 事象 referenceで指定した場合、Railsのindex名のルールが index_{{ベーステーブル名}}_on_{{リファレンス先のテーブル名}}_id のた…

ActionPack variantsを使うと、Viewテンプレートファイルを分けて扱うことができる

スマホ向けにテンプレ分けたいわーというニーズ向け 環境 rails (5.0.2) Action Pack Variants とは Ruby on Rails 4.1 リリースノート - Railsガイド ざっと説明すると request.variant にシンボル値をセットすることで、そのシンボル値が付加されているvie…

enumの日本語化を実現するgem「enum_help」

ほう、こんなものが…という既存プロジェクトに入ってた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…

RSpec(rspec-rails)のrails_helperの初期設定は「RAILS_ENVがなければtestにする」という設定なので気をつける

RAILS_ENVを意図的に設定しているとRSpecが動かない場面に遭遇するので気をつける、というメモ。 環境 rspec-rails (3.8.1) 該当記述 rails g rspec:install で生成されるファイルのテンプレートは以下のような記述になっている ENV['RAILS_ENV'] ||= 'test'…

Railsでlayoutを使いたくないときは layout false

あ、nilじゃなくてfalseなんだというメモ。 環境 gem 'rails', '= 5.0.2' やり方 Controllerに下記のように書く class HogeController < ApplicationController layout false 利用シーン 考えてみたが全然なく、今回利用した経緯としては 既存のテンプレート…

Railsのcontent_forは別のpartialに記述したものでも動くが、順番や場所によって挙動が変わる

読み込み順番によって変わるやつ。ということで なるべく使わないほうがいい けど動作だけ 環境 rails (5.0.2) 動作概要 通常のviewテンプレートの yield の 記述の前に content_for を 含むpartialを render すれば出てくる。 逆にyield の 記述のあとに co…

Railsコンソールでの実行をシェルからワンライナーで行うときに使える runner

よく忘れるのでメモ 環境 $ bin/rails -v Rails 5.2.2 使う機能 runnerコマンドを使うと、非対話的にRailsの文脈でRubyのコードを実行することができます。 - Rails のコマンドラインツール - Rails ガイド - 1.6 rails runner 使い方 $ bin/rails r "p User…

Railsのenvは production / test / developmentで動かそう

教訓的なメモ Railsの基本的なenvironment(env) Railsでデフォルトで存在するのは以下の3つ produciton(本番) test(テスト/Rspecなどの実行用) development(開発環境) envは増やせる、が このenv、増やすことができる。根本的には config/environments…

Date.todayはサーバーのタイムゾーン、Date.currentはRailsのタイムゾーンを意識して変換する

明確にズバーン!というのがなかったので書く 該当コード https://github.com/rails/rails/blob/6504d51a78a86a0994aa0f461e769e68d217361f/activesupport/lib/active_support/core_ext/date/calculations.rb#L48 Date.todayとは class Date (Ruby 2.6.0) - …

ActiveRecordのレコード数を測るときはsizeでやると大体がよしなにやってくれる

ソースコードを見ると明白なのでさらっとまじえつつ sizeとcountの処理の違い sizeは loaded? でロード状態であればサイズそのものを使う。以下は執筆時点masterのコード def size loaded? ? @records.length : count(:all) end いっぽうcountは特に回避コー…

『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 TL;DR with_indifferent_accessは対象のハッシュのキーをシンボルでも文字列でも対応できるようにするもの ただし、両方使えるようにすると懸念が増えるので、 deep_symbolize_keys も…

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としてメンテナンスされているものである。 知ったきっかけ…