2017-09-06 4 views
1

私はactiverecordモデルenumを照会しようとしていますが、whereメソッドでlike演算子を使用しようとしています。私にこのように列挙型を問い合わせるためのトリックがありますか?通常の列で正常に動作します。ここはコンソールにあります。rails 5 enum where "like"

irb(main):092:0> Proposal.select(:id,:department,:status).where('title like "test%"') 
Proposal Load (0.3ms) SELECT "proposals"."id", "proposals"."department", "proposals"."status" FROM "proposals" WHERE (title like "test%") LIMIT ? [["LIMIT", 11]] 
=> #<ActiveRecord::Relation [#<Proposal id: 7, department: 1, status: "In Progress">, #<Proposal id: 61, department: 2, status: "Won">]> 

以下のように

通常の文字列の列(タイトル)が動作しますが、列挙型でそれをしようと、何の結果が得られません。

irb(main):094:0> Proposal.select(:department,:status).where('status like "Wo%"') 
Proposal Load (0.3ms) SELECT "proposals"."department", "proposals"."status" FROM "proposals" WHERE (status like "Wo%") LIMIT ? [["LIMIT", 11]] 
=> #<ActiveRecord::Relation []> 

なぜ私は列挙型のような演算子を使用できないのですか?私はこれを使用して、datatables.netサーバー側の処理でビューをフィルタリングしようとしています。

答えて

1

列挙型は、データを0,1,2,3のように整数で格納します。次に、mapの番号をモデルで定義された列挙型の値にマップします。それが結果を得られない理由です

+0

したがって、列挙型の整数値がdb内にあるため、列挙型ではなく「列挙型」のようなタイトルが ' .whereメソッドはenumの知識がありませんか?それはむしろ限られている。唯一の選択は列挙型ではなくモデルに移動することだと思います –

+0

なぜあなたの場合に 'like'を使いたいのか分かりません。 enumを定義すると、いくつかの文字列/シンボルのリストがあり、このようにして 'Proposal.where(title:%i [title1 title2 title3])'というクエリを構築できます。 titleがカスタム文字列の場合は、enumを使用しないでください。 –

+0

私はProposalsのインデックスビューでステータスを表示しています。datatables.netでは、フィールド(enumフィールドを除く)で部分検索を実行できます。 pendと入力して、保留中のプロポーザルだけをフィルターに掛けることができればいいと思います。私はデータセット上でサーバーサイドの処理を使用しているので、 "%pend%"や '%pend%'のような名前のような検索を行う必要があります。 –