rails

RailsエンジニアのためのNext.js入門

というタイトルで先日 Kaigi on Rails 2021 で話してきました。 プレゼンで話せなかった内容なども含めてブログ記事にも書いておきます。 Intro Railsのことはけっこう知ってるけどNext.jsについて何も知らないという人をターゲットにしてNext.jsとは一体何…

Railsのネストしたネームスペースのautoload

こんな感じのコードがあったとして # app/models/user.rb class User end # app/models/admin/user.rb module Admin class User end end # app/controllers/admin/first_controller.rb class Admin::FirstController def index p User end end # app/control…

developmentでridgepole applyしたときにtest DBもつくる

Rails標準のMigrationを使う場合はdevelopmentのDBをアップデートしたらschema.rbが更新されてspec/rails_helper.rbとかに書いてある ActiveRecord::Migration.maintain_test_schema! っていうのでrspec実行前にtest DBをmigrationしてくれる。 ridgepoleを…

sqlite3でカラム定義の変更

sqlite3だとalter table change columnみたいのがないらしいのでnot nullとかdefault valueを変更するのどうすればいいんだろうと思ってrailsがどうしてるか見てみた。 class CreateTodos < ActiveRecord::Migration[5.0] def change create_table :todos do…

Railsのscopeとclass method

http://api.rubyonrails.org/classes/ActiveRecord/Scoping/Named/ClassMethods.html#method-i-scope ARのscopeはclass methodとだいたい同じ scopeはnilやfalseを返した時にallを返すのでメソッドチェインをブロックしない 必ずActiveRecord::Relationを返…

Rails4でトークン認証のアクションに対してCSRFを無効にする

Railsはprotect_from_forgeryって書くだけでCSRF対策が有効になってマジ便利なわけだけど、セッションで認証するんじゃなくてiOSから呼ぶAPIとかでトークン使って認証する場合はCSRFの対策いらないので無効にしたい。その場合は protect_from_forgery with: …

RailsでModelからselectボックスをつくる

collection_selectを使うといい感じにできる。例えば、あるグループに所属しているユーザーをプルダウンで選択させたい場合はこんな感じ。 <%= f.collection_select :user_id, @group.users.all, :id, :name %> ってやるとuser.idがoptionのvalue、user.name…

RailsでURLのバリデーション

URLのバリデーションをしつつ未入力も許可する場合のvalidate。 validates :url, { :allow_blank => true, :format => URI::regexp(%w(http https)), } allow_nilじゃなくてallow_blankを使うと空文字もOKになるらしい。

RailsでDBのNOTICEを出さないようにする

RailsでPostgreSQL使ってたらこんな感じのNOTICEが毎回出てうざいかったので消したかったという話。 NOTICE: CREATE TABLE will create implicit sequence "users_id_seq" for serial column "users.id" NOTICE: CREATE TABLE / PRIMARY KEY will create imp…