activerecordでデータのスペースを無視して検索


<http://tutty.info/521>  
このようなクエリをActiverecordで実行するにはどうしたらよいでしょうか




ActiveRecord (とAREL) だけで無理矢理書こうとするとこんな感じになりますが、直接SQLを書いてしまう方が分かりやすいと思います。

[code]

    Item.where(
      Arel::Nodes::NamedFunction.new(
        "REPLACE", [
          Arel::Nodes::NamedFunction.new(
            "REPLACE",
            [Item.arel_table[:name], "　", ""]
          ),
          " ", ""
        ]
      ).matches("Foo%")
    )
    
[/code]

生成されるSQL文:

[code]

    SELECT "items".* FROM "items"
    WHERE REPLACE(REPLACE("items"."name", '　', ''), ' ', '') LIKE 'Foo%'
    
[/code]

(ユーザからの入力などによって) 動的に条件を変更する場合には良いかもしれません。

