0

DataMapper の「.like」条件構文で正規表現を使用することは可能ですか?

たとえば、趣味が「スケート」という文字列で始まるユーザーだけを見つけたいとします。

正規表現は次のようになります。

^スケート

現在、趣味に「スケート」という単語が含まれているすべてのユーザーしか見つけることができないため、必要以上のレコードが返されます。

>> User.all(:hobby.like => "%skating%")

# 私が得るもの

+--------------+---------------+------------------ +---------------------+
| | ログイン | ファーストネーム | 姓 | 趣味 |
+--------------+---------------+------------------ +---------------------+
| | ジェファーソン | ジェファーソン | トム | トム | ジェファーソン | スケート |
| | アダムス | ジョン | ジョン | アダムス | スケート |
| | ワシントン | ジョージ | ワシントン | ワシントン | スピードスケート |
+--------------+---------------+------------------ +---------------------+

#手に入れたいもの

+--------------+---------------+------------------ +---------------------+
| | ログイン | ファーストネーム | 姓 | 趣味 |
+--------------+---------------+------------------ +---------------------+
| | ジェファーソン | ジェファーソン | トム | トム | ジェファーソン | スケート |
| | アダムス | ジョン | ジョン | アダムス | スケート |
+--------------+---------------+------------------ +---------------------+

>> User.all(:hobby.like => "%^skating%")

# 結果が出ない

フィードバックをお寄せいただきありがとうございます。

4

2 に答える 2

0

Datamapper では、および:conditionsを使用してレコードを検索するときに、その属性を介して正規表現を使用して mysql にクエリを実行できます。:all:first:last

「互換性」と記されたセクションを参照してください: http://datamapper.org/docs/find.html

たとえば、これは機能します(私はテストして検証しました):

User.all(:conditions => ['hobby REGEXP ?', '^skating'])

これは MySQL と同等です。

SELECT * FROM `user` WHERE (hobby REGEXP '^skating');

上記の Datamapper の例でREGEXPは、正規表現に対する MySQL のサポートを参照しています。

https://dev.mysql.com/doc/refman/5.7/en/regexp.html#operator_regexp

また、わかりやすくするために、上記の Datamapper の例の疑問符は、バグや SQL インジェクションを回避するのに役立ちます。

于 2017-07-21T04:03:27.670 に答える
0

どうですか :

    User.all(:hobby.like => "skating%")
于 2012-10-11T19:34:01.287 に答える