2つのカラムをくっつけて、likeで検索する方法
first_name, last_nameを二つのカラムがあるとします。
これを合わせて、両方をくっつけた場合の検索をしたい時です。
select first_name, last_name from users where type = "#{type}" AND CONCAT(first_name, last_name) like ?
CONCATを使用して、カラムをくっつて検索すれば大丈夫です。
やりたかったことは、同一の姓名は登録させたくありませんでした。
validate :validate_full_name def validate_full_name full_name = first_name + last_name type = model_name.name sql = <<-SQL select first_name, last_name from users where type = "#{type}" AND CONCAT(first_name, last_name) like ? SQL result = User.find_by_sql([sql, full_name]) errors.add(:full_name, "はすでに登録されています") if result.present? end
stiで継承しているので、typeをmodel_nameから取ってくるようにしました。
本当はテーブル名も直書きではなく、取得してきたかったのですが、うまくテーブル名になるのがなかった。
self.class.super_class.table_name
とすると、文字列になるので、これでエラーになってしまう・・・orz