PostgreSQLの配列型に対して「〜を含む」という検索したかったので調べました。
配列型はアンチパターンなのですが、そこは目を瞑ってください。。
環境
- ruby 2.7.4
- rails 5.2.5
- PostgreSQL 13.4
Migration
ブログ(Blogs)に複数のタグ(tags)を付与できるテーブルを作成します
class CreateBlogs < ActiveRecord::Migration[5.2] def change create_table :blogs do |t| t.references :user, foreign_key: true t.string :title, null: false t.text :detail, null: false t.text :tags, array: true t.timestamps end end end
実装
railsというタグを保持しているブログを検索する場合
- SQLで書くと
select * from blogs where 'rails' = ANY(tags)
- Railsで書くと
Blog.where("'rails' = ANY(tags)")