【问题标题】:using a regex with datamapper使用带有数据映射器的正则表达式
【发布时间】:2012-10-11 19:20:57
【问题描述】:

是否可以使用带有 DataMapper ".like" 条件语法的正则表达式?

例如,我想只查找爱好以字符串“skating”开头的用户。

正则表达式看起来像这样:

^滑冰

目前,我只能找到所有爱好包含“滑冰”一词的用户,因此返回的记录比我想要的要多。

>> User.all(:hobby.like => "%skating%") # 我得到了什么 +--------------+---------------+------------------ +----------+ |登录 |名字 |姓氏 |爱好 | +--------------+---------------+------------------ +----------+ |杰斐逊 |汤姆 |杰斐逊 |滑冰 | |亚当斯 |约翰 |亚当斯 |滑冰 | |华盛顿|乔治 |华盛顿 |速滑 | +--------------+---------------+------------------ +----------+ # 我想得到什么 +--------------+---------------+------------------ +----------+ |登录 |名字 |姓氏 |爱好 | +--------------+---------------+------------------ +----------+ |杰斐逊 |汤姆 |杰斐逊 |滑冰 | |亚当斯 |约翰 |亚当斯 |滑冰 | +--------------+---------------+------------------ +----------+ >> User.all(:hobby.like => "%^skating%") # 没有结果

感谢您的反馈!

【问题讨论】:

    标签: ruby regex datamapper


    【解决方案1】:

    怎么样:

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

    【讨论】:

      【解决方案2】:

      Datamapper 允许您在使用:all:first:last 查找记录时使用正则表达式通过其:conditions 属性查询mysql。

      请参阅标有“兼容性”的部分: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 注入。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-06
        • 1970-01-01
        • 2023-02-01
        • 2012-06-08
        • 2015-06-19
        • 2021-01-27
        • 1970-01-01
        • 2016-09-16
        相关资源
        最近更新 更多