EsqueletoのilikeでYesodのTextareaを検索する
やりたいこと
YesodのTextarea型で保存しているフィールドを Esqueletoのilike関数で検索したい.
なぜそのままだとダメなのか
ilike
はSqlString
のインスタンスを要求していてTextarea
はそのインスタンスじゃないからilike
の右辺がText
だから型が一致してないとダメ
なんでTextじゃなくてTextareaをモデルに保存したの
ユーザのtextareaを保存する場所で,
複数回編集が行われることが予想されたので復元が容易なTextarea
型にしました.
今は少し後悔しています.
プログラム側で変換かけるのが難しい理由
Value
はファンクターですが,
Esqueleto query expr backend => expr
はファンクターでは無いため,
簡単に内部を編集することができない.
SqlStringのインスタンスを用意すれば良いのでは
右辺と左辺を合わせなければダメ.
castStringを使えば?
なるほど,
SqlString
のインスタンスを定義して,
castString
を併用すれば可能ですね.
instance E.SqlString Textarea where
E.castString $ record E.^. recordMarkdown
できた
というわけで何もかもが雑ですが簡易的な検索機能が実装できました.
最適化はコンテンツが増えてきたらやれば良いのでやってないです.
デプロイはコードレビュー待つので来週やります.